Go语言备忘

1.  “{”不能单独放在一行

2.  同一个文件夹下的文件只能有一个包名,否则编译报错

3.  一个语句不需要以 ';' 结尾,但如果想把多个语句写在同一行,就需要以“;” 结尾

4. 字符串连接用 “+”

5. 使用 := 赋值操作符,只能被用在函数体内,而不可以用于全局变量的声明与赋值

6. 如果你想要交换两个变量的值,则可以简单地使用 a, b = b, a,两个变量的类型必须是相同。

7.  声明的变量必须被使用,但有时不需要使用从一个函数得到的某个返回值。 可以使用空白标识符 “_”,来抛弃值。

8. iota是一个自增枚举,而且还可以在枚举式里运算

9. select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运

10. len() 函数可以接受不同类型参数并返回该类型的长度

11. init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

12. 全局变量是允许声明但不使用的

13. unsafe.Sizeof返回的是数据类型的大小

14. 枚举 iota用法:

(1) 在 const关键字出现时将被重置为 0

(2) 每新增一行,将使 iota 计数一次(值加1)

(3) 某行赋值其他值时, 下面的每行都会取同样的值。而且iota同样在计数。

(4) 再次赋值 = iota时,会重新获得 iota计数的值

15. switch 后的变量可以是任何数据类型,但各个case 后的数据类型必须相同。

16. switch 可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型
   var x interface{}
   switch i := x.(type) {           
      case int:  
         fmt.Printf("x 是 int 型")                      
      case float64:
         fmt.Printf("x 是 float64 型")          
   }  }

17. (1) 数组的声明:var balance [5]int 

(2) 数组的初始化: var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

(3) 如果数组长度不确定,可以使用 ... 代替: var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

(4) 可以通过指定下标来初始化元素:balance := [5]float32{1: 20, 2:40} 

(5) 二维数组的声明:var balance [5][5]int 

(6) 初始化二维数组:var balance [2][3]int = {{1,2,3},{4,5,6}}   //注意最右边的是第一维,左边的是第二维

(7) 也可以创建一个空的二维数组,然后用append的方式,把一维数组添加进二维数组 datas = append(datas, row1)

18. 打印变量的内存地址: fmt.Printf("变量的地址: %x\n", &a  )   注意用的是 %x,十六进制

19. (1) 创建切片: myslice := make([]int, 4, 10)    //4是初始化大小,10是最大容量(可省略)

(2) 切片添加多个元素: myslice = append(myslice, 4,5,6)

(3) 复制切片:   copy(myslice2, myslice)

20. 语言范围(Range):在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对

nums := []int{2, 3, 4}

for index,value := range nums {}

kvs := map[string]string{"a": "apple", "b": "banana"}

for key,value := range kvs {}

21. (1) 创建map: mCapitalMap := make(map[string]string)

(2) 删除元素: delete(mCapitalMap, "keyA")

(3) map是无序的,遍历时要注意,可以另建有序key数组

22. 提供了interface数据类型,相当于 C++ 的虚基类

23. go并发:通过 go 关键字开启 goroutine,goroutine 是轻量级线程,注意是线程。

   go func(x, y, z)

24. 通道 channel 用于多线程同步

(1) 创建:ch := make(chan int)

      输入值:ch <- value

      输出值: value <- ch

(2) 可以设置缓冲区,通过 make 的第二个参数指定大小: ch := make(chan int, 100)

(3) 如果不带缓冲,发送方会阻塞, 直到接收方接收了值

(4) 如果带缓冲,发送方的值拷贝到缓冲区内,如果缓冲区已满,发送方会阻塞,直至接收方接收了新的值。

25. 数组和切片的区别

(1) 数组在创建时,需指定最大存放的元素个数;切片不用。

(2) 切片可以中途用append插入数据,以及自动扩容,但数组不行。

(3) 切片需要用make来创建

(4) 数组是值拷贝, 切片是引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值