1.go的深拷貝與淺拷貝
深拷貝 會賦值全部的內容 內容一樣但是地址不一樣 修改任何一個后地址不一樣 內容也會一樣
changeName(h1)對象傳到函數里面也是深拷貝
b := a 這是深拷貝 會生成兩個內存地址, b:=&a 這是淺拷貝a,b公用a的內存地址,b就是指針類型
2. go的斷言
b := <- allchan
a :=b.(Cat) //b為管道的類型是空接口,轉換為Cat結構體類型
3. go的閉包
func inc() func() int{
i:=0
fun := func() int{
i++
return i
}
return fun
}
什么是內鍵函數
goroutine
4.運算優先級
優先級 運算符
7 ^ !
6 * / % << >> & &^
5 + - | ^
4 == != < <= >= >
3 <-
2 &&
1 ||
5.var number *int
number=10
fmt.Println(number)
運行出錯
invalid memory address or nil pointer dereference
number是個空指針
6.子類繼承父類,子類沒有其父類的方法時調用父類的方法
7.fmt.Println(len("中國")) //輸出為6
8.defer的用法
9. 調用方法時,會自動對實參進行“取引用”或“解引用”操作 用值類型的實參調用形參為值類型的方法 用指針類型的實參調用形參為值類型的方法(會進行“自動解引用”) 用值類型的實參調用形參為指針類型的方法(會進行“自動取引用”) 用指針類型的實參調用形參為指針類型的方法 規則1: 當傳遞給方法的實參是一個值類型時,原值的內容不會受到影響,因為傳遞進來的是原值的副本;相反,當傳遞給方法的實參是一個指針類型時,原值的內容將可能受到影響。 規則2:方法的調用是否會對原值產生影響完全取決於該方法的形參是值類型還是參數類型。
再就是特殊情況下 當*interface 做形參時
10.switch fallthrough
11.golang中沒有隱藏的this指針
方法施加的對象顯式傳遞,沒有被隱藏起來
golang的面向對象表達更直觀,對於面向過程只是換了一種語法形式來表達
方法施加的對象不需要非得是指針,也不用非得叫this