我在縱梁上做這個練習(xí)。問題:使IPAddr類型實現(xiàn)fmt.Stringer將地址打印為虛線四邊形。例如,IPAddr{1, 2, 3, 4}應(yīng)該打印為"1.2.3.4".起始代碼:package mainimport "fmt"type IPAddr [4]byte// TODO: Add a "String() string" method to IPAddr.func main() { hosts := map[string]IPAddr{ "loopback": {127, 0, 0, 1}, "googleDNS": {8, 8, 8, 8}, } for name, ip := range hosts { fmt.Printf("%v: %v\n", name, ip) }}這是我的代碼:func (addr IPAddr) String() string { return fmt.Sprintf("%v.%v.%v.%v", addr[0], addr[1], addr[2], addr[3])}它奏效了!但我不明白為什么。我已經(jīng)收集到我不必顯式定義Stringer接口,因為它包含在 中fmt,但是main()我的代碼在函數(shù)中的哪個位置被使用?它是否會自動在IPAddr它找到的任何類型數(shù)據(jù)上運行它,這就是為什么在我不做任何事情的情況下修改地圖的原因?這是我的第一個基于編譯器的語言(我知道一些 Python 和 JavaScript),所以我不知道這個概念是否與其他語言相似。
1 回答

天涯盡頭無女友
TA貢獻1831條經(jīng)驗 獲得超9個贊
main
用于fmt.Printf
打印IP地址,String()
如果類型實現(xiàn)Stringer
接口則使用方法。由于您聲明了String() string
該類型的方法,因此IPAddr
實現(xiàn)了Stringer
接口。
您正在尋找的概念稱為“Duck Typing”。無需將類型聲明為實現(xiàn)接口。如果一個類型具有與接口相同的方法,則該類型實現(xiàn)該接口
- 1 回答
- 0 關(guān)注
- 116 瀏覽
添加回答
舉報
0/150
提交
取消