這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
武大郎,來十個燒餅。。。
package mainimport "fmt"type Integer int//為內建的int類型增加了新方法less,物件導向寫法func (a Integer) Less(b Integer) bool { return a < b}func Integer_Less(a Integer, b Integer) bool { return a < b}//Go的物件導向,如果需要修改對象,必須用指標,這不是Go約束,還是自然約束func (a *Integer) Add(b Integer) { *a += b}//Integer類型是一個int,為int起一個別名Integer,// 並且增加一系列方法Add,Add2,又編程了一個新的類型,這個類型還完全擁有int的功能//傳遞值而不是指標func (a Integer) Add2(b Integer) { a += b fmt.Println(a) fmt.Println(b)}func main() { var a Integer = 1 if a.Less(2) { fmt.Println(a, "Less 2") } if Integer_Less(a, 2) { fmt.Println(a, "Less 2") } //為Integer又加了Add方法,Add()方法需要修改對象的值,需要指標引用 //a.Add(2) //fmt.Println("a=", a) //實現成員方法傳入的如果不是指標,而是值,也就是Integer,而非*Iteger,,這時a=1 a.Add2(2) fmt.Println("a=", a) //Go語言和C語言一樣,類型都是基於值傳遞,想要修改變數的值,只能傳遞指標}/*Go語言中沒有隱藏的this指標方法施加的目標(“對象”)顯示傳遞,沒有被隱藏方法施加的目標(“對象”)不需要非得是指標,也不用非得叫this*/
大郎說,燒餅放在家裡了
//值語義和引用語義//b=a//b.Modify()//如果b的修改,不影響a的值,那麼此類型就是實值型別//如果會影響a的值,那麼此類型就是參考型別//Go語言大多類型都是值語義//基本類型:byte、int、bool、float32、float64、string等//複合類型:數組(array)、結構體(struct)和指標(point)//數組被完整的複製,就是值語義func main() {var a=[3]int{1,2,3}var b=a //表示b=a指派陳述式,是數組內容的完整複製b[1]++fmt.Println(a,b)}//引用方法,需要使用指標func main() { var a = [3]int{1, 2, 3} var b = &a //這句賦值,是數組內容的引用,變數b類型是*[3]int類型 b[1]++ fmt.Print(a, *b)}