准备看6.824, 竟然要先学go语言
首先是不同的定义方式,int在后面,这样a/b/c都是Int类型,当然也不需要分号结尾
var a, b, c int
函数定义, 开始看的只有num2还以为打错了,结果竟然也是一起定义成了int类型
func max(num1, num2 int) int {
...
}
声明长度为10的float32类型数组,名为balance。如果要初始化直接在后面加个大括号即可。
var balance [10] float32
int型指针, 用法同c语言
var ip *int
结构体
type Books struct {
title string
author string
subject string
book_id int
}
切片, 类似vector可以不指定容量,指定的话也只是长度,可以扩展
s :=[] int {1,2,3}
s :=make([]int,3,5) // 长度3,容量5
len(s) cap(s) // 分别计算长度,与容量
s[l:r] // 获取闭区间l到开区间r的切片
append // 用于追加
range进行遍历。对于遍历数组nums,i是序列号,num是值。如果遍历map,则是key与value。
for i, num := range nums {
if num == 3 {
fmt.Println("index:", i)
}
}
map,创建map的两种方式,以及初始化的方式
var countryCapitalMap map[string]string /*创建集合 */
countryCapitalMap = make(map[string]string)
countryCapitalMap [ "France" ] = "巴黎"
类型转换
var z int;
float32(z); //转换为float32
通过go 关键字开启新线程,实现并发
例如:say是一个输出字符串的函数
go say("world")
say("hello")
则会没有先后顺序的输出world 和 hello
通道。可用来同步运行和通讯。
ch := make(chan int)
ch <- v // 把 v 发送到通道 ch
v := <-ch // 从 ch 接收数据 并把值赋给 v
通道缓冲区。与通道唯一区别就是,而发送端可以把数据发送到缓冲区,若缓冲区满了,就会如同不带缓冲区一样一直阻塞
ch := make(chan int, 100)