1. 程式人生 > 其它 >GOLANG-易錯細節記錄

GOLANG-易錯細節記錄

1、panic與defer關係以及多個defer的執行順序;

  panic在defer函式執行之後執行;多個defer則是按照先進後出的順序執行。

2、關於使用make函式初始化切片注意點;

  make([]int, 5) 表示使用make初始化一個切片,切片資料為int型別,切片內部初始化5個元素,初始值為int型別的零值即0;[0 0 0 0 0]

  make([]string, 5) 表示使用make初始化一個切片,切片資料為string型別,切片內部初始化5個元素,初始值為string型別的零值即空字串;[    ] 注意裡面是空字串,是有長度的。

3、可使用 == 或者 != 操作的資料型別;

  布林值具有可比性。兩個布林值是相等的,如果它們兩者之一 true或兩者都相等false。
  整數值以通常的方式具有可比性和有序性。
  根據 IEEE-754 標準的定義,浮點值具有可比性和有序性。
  複數值具有可比性。兩個複數值u和v相等,如果兩者real(u) == real(v)和 imag(u) == imag(v)。
  字串值是可比較的和有序的,詞法位元組。
  指標值是可比較的。如果兩個指標值指向同一個變數或兩者都有值,則它們相等nil。指向不同的零大小變數的指標可能相等,也可能不相等。
  通道值具有可比性。如果兩個通道值是由相同的呼叫建立的, make 或者兩者都具有 value ,則它們是相等的nil。
  介面值具有可比性。如果兩個介面值具有相同的動態型別和相同的動態值,或者兩者都具有值,則它們是相等的nil。
  x非介面型別X的值 和t介面型別T的值在型別的值X是可比較的並且 X 實現 T時是可比較的。如果t的動態型別與 相同X 且t的動態值等於 ,則它們相等x。
  如果結構值的所有欄位都是可比較的,則結構值是可比較的。如果它們對應的非空白欄位 相等,則兩個結構值相等。
  如果陣列元素型別的值是可比較的,則陣列值是可比較的。如果它們的對應元素相等,則兩個陣列值相等。

  切片、map、函式等是不能比較的

官方文件:https://go.dev/ref/spec#Comparison_operators

4、