一、go语言常用命令
go get 获取远程包(需提前安装git) go run 运行 go build 测试编译(package main 的文件) go fmt 格式化代码 go install 编译包文件和整个程序 go test 运行测试文件(**_test.go是测试文件,命名自己文件的时候需要注意) go doc 查看文档(本地官网 godoc -http=:8080 & 后台执行)
我们可以将go的官网放到本地:
godoc -http=:8080
然后我们可以访问本地8080端口:
Go环境变量与工作目录:GOPATH下需要建立 3个目录(bin存放编译后生成的可执行文件;pkg存放编译后生成的包文件;src存放项目源码)
二、go 语法结构
1、Go导入package的格式
package main包含main函数一个程序有且只有一个main包和一个main函数
package 要放在非注释的第一行
package 后加import,import 引入非main包
一般建议package的名称和目录名一致 pacage 名称不要使用驼峰标记法,使用下划线
var 全局变量
type 基本类型 比如:type newtype struct/interface{(内容)}
改包名:
import abc "fmt"/import . "fmt"
调用的时候
abc.Println/Println
不推荐使用.那种,容易混淆
只有
package
为main
的包可以包含main函数,一个可执行程
test.go
package ok // package main 这里故意将main 包名写错 import "fmt" func main(){ fmt.Println("Hello,World") }
如果我们运行的程序里边没有 package main
包,则执行会报错;➜ src go run myfirstgo/test.go go run: cannot run non-main package
import and not used:"io";
2、package别名
当使用第三方包时,包名可能会非常接近或相同,此时就可以使用别名来进行区别和调用
import "fmt" // 使用别名 import std "fmt" std.Println("Hello,world")
省略调用
// 省略调用 import . "fmt" Println("Hello,world")
注意点:
1.不建议使用
省略调用,易混淆
2.不可以
和别名同时使用
3.可见性规则
Go语言中,使用 大小写
来决定该常亮、变量、类型、接口、结构或函数,是否可以被外部包所调用:
根据约定,函数名
首字母小写
即为private
func getField(){ // ... }
函数名
首字母大写
即为public
func Print(){ // ... }
完整示例:
package main // 导入其他的包 import "fmt" // 第一种导入方法 /* import{ "fmt" "io" "os" } */ // 常量的定义 const PI = 3.14 // 全局变量的声明与赋值 var name = "gopher" // 一般类型声明 type newType int // 结构的声明 type gopher struct{} // 接口的声明 type golang interface{} // 由 main 函数作为程序入口点启动 func main(){ fmt.Println("Hello,World") }
牛刀小试:
既然导入多个包可以进行简写,那么声明多个常亮、全局变量或一般类型(非接口、非结构)是否也可以使用同样的方法呢?
定义常亮:
const( PI = 3.14 const1 = 1 Radis = 10 )
全局变量的声明与赋值:
var ( name = "corwien" age = 20 address = "guangzhou" )
一般类型声明:
type ( newType int type1 float32 )
三、类型与变量
1.类型
1、布尔类型:bool
长度:1字节
取值范围:true,false
注意事项:不可以用数字代表true或false
2、整型:int/uint
-根据运行平台可能为32或64位
3、8位整型:int8/uint8
-长度:1字节
-取值范围:-128~127/0~255
4、字节型:byte(uint8别名
)
5、16位整型:int16/uint16
-长度:2字节
-取值范围:-32768~32767/0~65565
6、32位整型:int32(rune)/uint32
-长度:4字节
-取值范围:-32768~32767/0~65565
7、浮点型:float32/float64
-长度:4/8字节
-小数位:精确到7/15小数位
8、复数:complex64/complex128
-长度:8/16字节
足够保存指针的32、64位整数型:uintptr
9、其他值类型:
- array、struct、string
10、引用类型:
- slice,map,chan
11、接口类型:interface
12、函数类型:func,可以赋值给变量
类型零值
零值并不等于空值,而是当变量被声明为某种类型后的默认值,通常情况下值类型的默认值为0,bool为false,string为空字符串
类型别名
type ( byte int8 rune int32 文本 string ) // 使用中文类型,牛逼啊 var b 文本 b = "你好哈亲"
2.变量
2.1 单个变量的声明与赋值
示例:
var a int // 变量的声明 a = 123 // 变量的赋值 // 变量声明的同时赋值 var a int = 123 // 上行的格式可省略变量类型,由系统推断 var c = 123 // 变量声明与赋值的最简写法 d := 678
d := 678 冒号的作用就是代替关键字 var 的
2.2 多个变量的声明与赋值
举例:
var( // 使用常规方式 a = 'hello' // 使用并行方式以及类型推断 b,c = 1,2 // d := 3 // 不可以省略 var )
多个变量的声明
// 多个变量的声明 var a,b,c int // 多个变量的赋值 a,2,3 // 多个变量声明的同时赋值 var d,e,f int = 4,5,6 // 省略变量类型,有系统推断 var g,h,m = 7,8,9 // 多个变量声明与赋值的最简写法 n,o,p := 10,11,12
2.3 变量的类型转换
Go中不存在隐式转换,所有类型转换必须显示声明
- 转换
只能发生在两种相互兼容的类型
之间 - 类型转换的格式:
// 当变量未在前边申明过,则需要冒号:,如果已经声明过,则不需要冒号 <ValueA>[:] = <TypeOfValueA>(<ValueB>)
示例:
// 在相互兼容的两种类型之间转换 var a float32 = 1.1 b := int(a) // 以下表达式无法通过编译 var c bool = true d := int(c)
全局变量的声明不可以省略var 局部变量不可以使用var()的方式简写
思考
尝试运行下边的代码,开会发生什么,并思考为什么?
// 变量类型转换,整数转为字符,会发生什么呢? func main() { var a int = 65 b := string(a) fmt.Println(b) }
四、常量与运算符
1、常量的定义
- 常量的值在编译时就已经确定
- 常量的定义格式与变量基本相同
- 等号右侧必须是常量或者常量表达式
// 定义单个常量 const a int = 1 const b = 'A' const { text = "123" length = len(text) num = b * 20 } // 同时定义多个变量 const i,j,k = 1,"2","3" const( text2,length2,num2 = "234",len(text2),k * 10 )
2、常量的初始化规则与枚举
- 在定义常量组时,如果不提供初始值,则表示将使用上行的表达式
- 使用相同的表达式不代表具有相同的值
-
iota
是常量的计数器,从0开始,组中每定义1个常量自动递增1 - 通过初始化规则与
iota
可以达到枚举的效果 - 每遇到一个 const 关键字,iota就会重置为0
示例:
const ( // a与b都为"A" a = "A" b c = iota d // d的值为3 ) const( e = iota f // f 的值为1 ) // 星期枚举 const( // 第一个常量不可省略表达式 Monday = iota Tuesday Wednesday Thursday Firday Saturday Sunday )
3、运算符
- Go中的运算符均是从左至右结合
优先级(从高到底) - ^ ! (一元运算符)
- * / % << >> & &^
- + - | ^ (二元运算符)
- == != < <= >= >
- <- (专门用于channel)
- &&
- ||
原文链接:https://www.f2er.com/go/187918.html