准备看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)

 

01-12 20:40