基础语法
Go 语言入门指南:基础语法和常用特性解析| 青训营(上) – 掘金 (juejin.cn)
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 上一篇看这里 ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
2、入门
2.6、切片
Go 语言切片是对数组的抽象(“动态数组”,长度不固定,可以追加元素)
var slice1 []type = make([]type, len)
slice1 := make([]type, len)
空(nil)切片–未初始化,长度为0
copy()拷贝 append()追加
2.7、函数
函数基本格式,由函数名、参数、返回值组成
func function_name( [parameter list] ) [return_types] {
函数体
}
- 函数内定义的变量称为局部变量
- 函数外定义的变量称为全局变量
- 函数定义中的变量称为形式参数
Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑
2.8、指针
Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。
指针变量存储另一个变量的内存地址:
- 在函数之间传递大型数据结构
- 修改函数内变量的值
- 动态分配内存
当一个指针被定义后没有分配到任何变量时,它的值为 nil,也称为空指针,指代零值或空值。
一个指针变量通常缩写为 ptr。
2.9、Map集合
Map 是一种无序的键值对的集合,通过 key 来快速检索数据。
delete() 函数用于通过键删除键和值
2.10、range
在上述的代码中,我们已经接触到了range,它用来遍历
//格式(key, value可以省略)
for key, value := range oldMap {
newMap[key] = value
}
//如果只想读取一个(value)
for _, value := range oldMap
2.11、结构体
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合(类似实体类)
在函数中结构体类型可以作为参数传递
2.12、字符串操作
将一个字符串转换成另一个类型,可以使用以下语法:
var str string = "10"
var num int
num, _ = strconv.Atoi(str)
strconv.Atoi 函数返回两个值,第一个是转换后的整型值,第二个是可能发生的错误,我们可以使用空白标识符 _ 来忽略这个错误
整数->字符串,strconv.Itoa(不需要错误)
字符串->浮点数,strconv.ParseFloat(需要错误)
浮点数->字符串,strconv.FormatFloat(不需要错误)
%v 结构体
%+v 包括结构体的字段名。
%#v 生成该值的源代码片段。
%。2f 保留两位小数
2.13、接口
Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。
Go 语言中的接口是隐式实现的,也就是说,如果一个类型实现了一个接口定义的所有方法,那么它就自动地实现了该接口。因此,我们可以通过将接口作为参数来实现对不同类型的调用,从而实现多态。
2.14、错误处理
error 类型是一个接口类型,这是它的定义:
type error interface {
Error() string
}
函数通常在最后的返回值中返回错误信息。使用 errors.New 可返回一个错误信息
go 提供一种 panic-recover模式用于处理程序的异常,这和其他语言的采用的 Exception 机制类似
panic 是基于goroutine级别的异常机制
如果程序里的panic产生跨多个goroutine(协程)时,那么此时想catch住该panic,一定在panic产生的同一个goroutine里进行捕获,否则无效.
当数组越界、访问非法空间或者我们直接调用panic时,panic会停掉当前正在执行的程序,包括所有协程,比起exit直接退出,panic的退出更有秩序,他会他会先处理完当前goroutine已经defer挂上去的任务,执行完毕后再退出整个程序。
而defer的存在,让我们有更多的选择,比如在defer中通过recover截取panic,从而达到try…catch的效果
panic还可以接收一个参数,通常是字符串类型错误信息,执行到panic时,他会打印这个字符串和触发他的调用。
2.15、JSON和时间数据
保证结构体每个变量首字母大写,就可以使用Marshaler(用于自定义编码json)方法
16进制编码,打印需要强制转换成字符串
变量后加tag可以改成小写
go中的 time.Now().Unix() 得到时间戳()
3、并发
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。
goroutine 语法格式:
go 函数名( 参数列表 )
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。
goroutine 语法格式:
go 函数名( 参数列表 )
通道可以设置缓冲区,通过 make 的第二个参数指定缓冲区大小:
ch := make(chan int, 100)
带缓冲区的通道允许发送端的数据发送和接收端的数据获取处于异步状态,就是说发送端发送的数据可以放在缓冲区里面,可以等待接收端去获取数据,而不是立刻需要接收端去获取数据。
Go语言的 os 包中提供了操作系统函数的接口,是一个比较重要的包。顾名思义,os 包的作用主要是在服务器上进行系统的基本操作,如文件操作、目录操作、执行命令、信号与中断、进程、系统状态等等
OK,本文到此就结束了。谢谢大家阅读|ू・ω・` )