2 回答

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
只需將指針傳遞給您的結(jié)構(gòu),而不是將其值傳遞給函數(shù)。指針仍然存在,interface{}
但是指向接口的指針是沒有意義的。

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超13個(gè)贊
聽起來您想通過 a 發(fā)送非指針值chan interface{}
并讓自定義MarshalJSON
方法按預(yù)期工作。在這種情況下,不要在指針類型上定義方法。
package main
import (
"encoding/json"
"fmt"
"log"
"time"
)
func printer(in chan interface{}) {
for val := range in {
buf, err := json.Marshal(val)
if err != nil {
log.Println(err.Error())
}
log.Println(string(buf))
}
}
type MyType struct {
name string
}
func (m MyType) MarshalJSON() ([]byte, error) {
return []byte(fmt.Sprintf(`"%s"`, m.name)), nil
}
func main() {
ch := make(chan interface{})
go printer(ch)
ch <- "string value"
ch <- 25
ch <- MyType{
name: "foo",
}
time.Sleep(time.Second)
}
唯一真正的區(qū)別是方法接收器。func (m MyType) MarshalJSON ([]byte, error)代替func (m *MyType) MarshalJSON ([]byte, error)
- 2 回答
- 0 關(guān)注
- 283 瀏覽
添加回答
舉報(bào)