1. 指針
1.1 指針特性
golang不支持指針運算,保證內存安全
golang有自己的垃圾回收,所以指針沒有顯示調用摧毀函數
空指針當一個指針被定義後沒有分配到任何變量時,它的值爲 nil。
nil指針也稱爲空指針。nil在概念上和其它語言的null、None、nil、NULL一樣,都指代零值或空值。
1.2 new和&
new和&均可獲取地址,也就是指針
person1 := new(Person)//使用new創建一個person2對象,同時獲得person的指針
person2 := &Person{"lisi","man",25}//使用&創建一個person3對象,同時獲得person的指針
1.3 結構體指針
type Person struct {
name string
sex string
age int
}
func main() {
person1 := Person{"zhangsan","man",25} //創建一個person1對象
fmt.Printf("person1:%v\n",person1)
demo(&person1)
fmt.Printf("person1:%v\n",person1)
}
func demo(person *Person) {
(*person).age = 18 //**顯示的解引用**
person.name = "GoLang" //**隱式的解引用**
}
2. 值類型,引用類型
2.1 值類型
值傳遞類型:布爾變量、數值類型、字符串類型、數組
值在傳遞給函數或者方法時會被複制一份,然後方法或函數使用的是複製的這份值,也就不會對原值產生什麼影響。
2.2 引用類型
引用類型:映射(map),數組切片(slice),通道(channel),方法與函數。
2.3 golang字符串
golang字符串除了函數傳遞是值拷貝以外,字符串修改操作,也是值拷貝出來的,所以golang字符串有個特點,初始化後永不可變。