Go入門 方法呼叫

2021-09-11 02:46:05 字數 836 閱讀 2422

package main

import "container/vector"

func main()

k2 := &vector.intvector{}

k3 := new(vector.intvector)

k1.push(2)

k2.push(3)

k3.push(4)

}

k1,k2,k3的型別分別是什麼?

k1 的型別是vector.intvector,這裡使用了{},因此獲得了型別的值

k2是*vector.intvector,因為獲得了復合語句的位址

k2是*vector.intvector,因為new返回該型別的指標

2. 當前,這個程式可以變異並且執行良好。在不同型別的變數上push都可以工作。push的文件這樣描述:

func (p* intvector) push(x int) push增加x到向量的末尾

那麼接受者應該是 *intvector型別,為什麼上面的**(push語句)可以正確工作?above(the push statements) work correct then?

分析題目,我們知道

當x的方法集包含m,並且引數列表可以賦值給m的引數,方法呼叫x.m()是合法的。如果x可以被位址化,而&x的方法集合包含m,x.m()可以作為(&x).m()的省略寫法

解釋一下,由於k1可以被位址化,而*vector.intvector具有push方法,呼叫k1.push(2)被go 轉換為(&k1).push(2)來使系統愉悅(也是你愉悅)

Go語言入門 延遲呼叫 defer

func functionname parameterlist returntypes 語句defer想當前函式註冊乙個稍微執行的函式呼叫,它會在主調函式或者方法返回之前但是其返回值 當返回值存在 計算後執行。存在多個defer語句採用後進先出lifo last in first out 的順序執行...

go 語言入門

參見文章1,文章2 1.編譯 go build test.go 2.執行 go run test.go 3.看幫助 go doc builtin go doc fmt fnv4.執行測試 編寫源 even.go this package is test for write package packa...

Go 入門基礎

seaconch 最近在學習 go 語言程式設計,基礎部分還沒有看完,不過只看不練,或者只過一遍還是感覺不夠牢固,所以決定通過文章來記錄 並且梳理一下已了解過的知識。go 編寫的 檔案都以.go結尾。這裡假設我們有乙個名為 main.go的檔案。那想要將main.go生成乙個可執行的應用程式,至少要...