2 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
不允許在定義類型的包之外定義方法。這給你留下了幾個(gè)選擇:
定義包中的方法
models
。這是處理您自己的代碼時(shí)最簡(jiǎn)單的方法,但當(dāng)然不適用于第三方類型。創(chuàng)建常規(guī)函數(shù)而不是方法 (
func String(meter models.Meter) string
)。不過(guò),這可能不太慣用(尤其是對(duì)于String
方法),并且也無(wú)法訪問(wèn)私有字段(除非您在包中定義函數(shù)models
,在這種情況下您可以只定義方法)。創(chuàng)建嵌入原始類型的新類型。這使用起來(lái)有點(diǎn)麻煩,但允許您擴(kuò)展現(xiàn)有的行為。像這樣的東西:
`
package main
import (
"fmt"
"time"
)
func main() {
myTime := MyTime{time.Now()}
fmt.Println(myTime) /* behaves as time.Time */
fmt.Println(myTime.Foo()) /* also has extra methods */
}
type MyTime struct {
time.Time
}
func (m MyTime) Foo() string {
return "foo"
}

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
簡(jiǎn)單的,
import?...bla/bla/Meter type?extended?Meter
- 2 回答
- 0 關(guān)注
- 171 瀏覽
添加回答
舉報(bào)