第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

goLang 將結(jié)構(gòu)傳遞給函數(shù)(參數(shù)接口{})

goLang 將結(jié)構(gòu)傳遞給函數(shù)(參數(shù)接口{})

Go
慕的地6264312 2021-11-29 16:08:52
這是我的代碼 http://play.golang.org/p/h0N4t2ZAKQpackage mainimport (    "fmt"    "reflect")type Msg struct {    Message string}func print(y interface{}) {    z, ok := y.(Msg)    fmt.Println(reflect.TypeOf(z))    fmt.Println("Value of ok ", ok)    if ok {        fmt.Println("Message is "+ z.Message)    }}func main() {    foo := new(Msg)    foo.Message="Hello"    fmt.Println("Messege in main "+foo.Message)    print(foo)}當(dāng)我運(yùn)行它時(shí) z.Message 不打印 Hello 不知道為什么。有人可以澄清嗎?提前致謝
查看完整描述

2 回答

?
長(zhǎng)風(fēng)秋雁

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊

foo程序中的類型是*Msg(指向 Msg 的指針),而不是Msg. 你需要轉(zhuǎn)換y*Msgprinthttp://play.golang.org/p/MTi7QhSVQz):

z, ok := y.(*Msg)

或者,您可以使用Msg類型foohttp://play.golang.org/p/XMftjVtzBk):

foo := Msg{Message: "Hello"}

或者

var foo Msg
foo.Message = "Hello"


查看完整回答
反對(duì) 回復(fù) 2021-11-29
?
LEATH

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊

如果你運(yùn)行你的程序,你會(huì)注意到的一件事是“ok”的值是假的,這就是如果沒有執(zhí)行你的打印語句的原因。如果您從 z, ok := y.(Msg) 中刪除“ok”,您將看到 Go 在執(zhí)行此斷言語句時(shí)拋出的錯(cuò)誤。確定后,Go 不會(huì)恐慌,如果斷言失敗,將返回 false。您的情況正在發(fā)生這種情況。

斷言失敗的原因是,預(yù)期,打印方法中的類型是 Msg(main.Msg),但傳遞的是指針,即 *main.Msg。當(dāng)你不使用“ok”時(shí)你會(huì)看到這個(gè)錯(cuò)誤

所以一種方法是

print(*foo)

或者

z, ok := y.(*Msg)


查看完整回答
反對(duì) 回復(fù) 2021-11-29
  • 2 回答
  • 0 關(guān)注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)