Golang初级知识汇总(一)

发表时间: 2023-08-30 10:42

数组和切片

  • 数组的赋值是 值 传递,作为参数是一次复制操作。
  • 数组与切片的区别,指定元素个数的是数组,没指定的是切片
  • 切片取值是取的下标前闭后开的(myArray[2, 4])。
  • 切片的赋值是引用传递,若要值传递,用 copy(dst, src)
  • 字符串可以用数组下标方式取值,但不能赋值,会报编译型错误。

加载顺序

import --> const --> var --> init()

time.Time

  • Golang 中 time.Time 类型的零值对应的时间戳是个负值,表示的是: 0001年01月01日,unix值是:-62135596800(负值),而 mongoDB中 date 的零值对应的时间戳是0,表示的是 1970年01月01日。
  • time.After() 函数常用于 timeout,它返回的一个通道 <-chan time.Time,直到超时该通道才返回值

其它

  • 浮点数比较不能用 == ,用 math.Fdim() 函数来比较
  • 关闭通道,但通道中还有数据怎么办?关闭通道后,不能再写数据(会抛异常),但依然可以读取。所以 val, ok := <-chans 这句中 若 ok 为 false 即表示了没值,也表示通道被关闭了。因为没被关闭的话,会在阻塞状态。
  • append 不是线程安全的,当并发时可能导致不可预估情况发生