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

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

斷言結構切片的接口

斷言結構切片的接口

Go
慕蓋茨4494581 2022-07-11 16:03:47
為什么我面臨錯誤,即第一個要附加的 arg 在已經被斷言為結構切片的接口之后必須是切片?package mainimport (    "fmt")type AccessKeys struct {    AccessKeys interface{}}type AccessKey struct {    AccessKeyID string}func main() {    var b AccessKey    b.AccessKeyID = "ye"    var bs AccessKeys    bs.AccessKeys = bs.AccessKeys.([]AccessKey) // Assert    bs.AccessKeys = append(bs.AccessKeys, b) // Error: first argument to append must be slice; have interface {}        fmt.Println(bs)}https://play.golang.org/p/OfT3i1AbkMe
查看完整描述

2 回答

?
Qyouu

TA貢獻1786條經驗 獲得超11個贊

它無法工作,因為您嘗試將 AccessKey 附加到不是切片的 interface{} 類型。


package main


import (

    "fmt"

)


type AccessKeys struct {

    AccessKeys []interface{}

}


type AccessKey struct {

    AccessKeyID string

}


func main() {

    var b AccessKey

    b.AccessKeyID = "ye"


    var bs AccessKeys

    bs.AccessKeys = append(bs.AccessKeys, b)

    

    fmt.Println(bs)

}

但在我看來,這不是非常慣用的做某事的方式,而是取決于你想要實現的目標。我什至會替換


AccessKeys []interface{}

AccessKeys []AccessKey


查看完整回答
反對 回復 2022-07-11
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

感謝一位后來刪除他的評論的好心的海報。

它不起作用,因為AccessKeys interface{}使 AccessKeys 成為無類型的 nil 類型,因為接口的零值是無類型的nil。由于 Go 是一種靜態類型語言,它會在編譯時報錯。

如果這是有道理的,出于同樣的原因,你不能在 Go 中這樣做:

n := nil

即使這是固定的,它也會在運行時在斷言 say 時失敗panic: interface conversion: interface {} is nil, not []main.AccessKey。雖然我不確定為什么。


查看完整回答
反對 回復 2022-07-11
  • 2 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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