GO基础学习(一)
环境安装
Mac 下载go地址:https://golang.org/dl/
下载x86或arm架构的pkg包双击安装即可
GOROOT和GOPATH
GOROOT:go的安装路径
GOPATH:go的工作路径
GOPATH约定有三个子目录
- src目录:存放源代码
- pkg目录:编译时生成的中间文件
- bin目录:编译后生成的可执行文件
go语言结构(以Hello,World!为例)
包声明 package main |
注意:a.标识符以大写字母开头时,可以被外部包代码使用,如果小写字母开头,则不可见
b.{不能单独放在一行
变量声明
声明单个变量:var a int
a=1
不赋值时默认为0值
或var a=1
或a := 1
注:如果已经用var声明过再使用:=声明会报错
声明多个变量:var a,b = 1,2
a,b := 1,2
空白标识符_ 用于抛弃值
常量声明
const a int = 1
或
const a =1
常量枚举 const{
a=1
b=2
c=3
}
iota特殊常量,在const中使用iota后iota的值为当前const枚举的常量的个数
条件语句
go中有select语句没有三元运算符,select语句是随机执行case语句内容,执行到可运行case停止
循环语句
go只有for循环
结构体
结构体作为函数参数时写法为func test\(book books\){}。
输出结构体的指针时使用fmt.Println()默认为%v输出,使用%p可以输出地址
切片
go的切片是因为go数组长度不可变,为了使用可变长度的数组,抽象出了切片
切片初始化 直接初始化:s := \[ \]int {1,2,3}
用数组初始化:s := arr \[:\]
使用make()函数初始化:s :=make\(\[ \]int,5,10\)
5是切片初始长度,10是最大长度
make()创建后赋值时需要一个值一个值进行赋值
range
range关键字用于for a,b := range “cd”
将cd字符串赋值给a,b变量,c字符的索引是第一个参数,字符的Unicode值是第二个参数
数组上使用range时,返回的第一个值为数组的索引,不需要可以使用_代替
map集合
无序的键值对集合
var a map\[string\]string //声明map |
接口
type phone interface{ |
使用时定义一个接口类型的变量iPhone phone,然后给变量赋值iPhone = new(Iphone)调用test()方法IPhone.test()
并发
go的并发通过go关键字开启goroutine 例 goroutine f\(x\) f\(y\)
同一个程序中所有的goroutine共享一个地址空间
chanel
channel用来传递数据结构
ch \-\> v 把v发送到通道 |
通道不带缓冲区,发送端发送数据时接收端要及时接受数据
可以设置缓冲区,创建通道时make的第二个参数是缓冲区的大小
缓冲区大小是有限的,当缓冲区满时,发送端将会不能发送数据
close()函数关闭通道
错误处理
go的错误处理是通过error接口
附
fmt.Println函数和println函数的区别在于,fmt.Println函数能输出全部类型,是标准输出,而println对有些类型的输出不支持
nil为空指针
格式化字符串 fmt.Sprintf()
在函数参数位置和返回值位置都可以直接赋值。例:func f\(a int\)\(b int\){}