亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

函數是否必須滿足函數類型的確切簽名?

函數是否必須滿足函數類型的確切簽名?

Go
肥皂起泡泡 2022-01-10 16:50:53
考慮以下簡單的 go 程序package mainimport (    "io"    "encoding/json"    "os")type MyEncoder interface {    Encode(v interface{}) error}type MyEncoderCreator func(io.Writer) *MyEncodertype MyContainer struct {    Creator MyEncoderCreator}func main() {    container := Container{        Creator:json.NewEncoder,    }    encoder := container.Creator(os.Stdout)    encoder.Encode(map[string]string{"key":"value"})}此程序無法編譯并出現以下錯誤:./main.go:21: cannot use json.NewEncoder (type func(io.Writer) *json.Encoder) as type MyEncoderCreator in field value為什么是這樣?該json.Encoder結構有一個滿足MyEncoder接口的接收器。那么是否應該json.NewEncoder允許將該功能分配給MyContainer.Creator?
查看完整描述

1 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

是的,函數必須滿足函數類型的確切簽名。在其他情況下也會出現類似的情況:更正式的說法是Go 中的類型通常缺乏協方差。在這里,您可以包裝json.NewEncoder一個返回的函數MyEncoder

我會使用值類型MyEncoder不是指針*MyEncoder,因為如果你存儲一個指針的接口值,那么通常你不也需要一個指針該接口值只是為了避免副本; 如果有幫助,這里有更多關于指針與值的信息。


查看完整回答
反對 回復 2022-01-10
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號