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

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

如何遍歷接口切片?

如何遍歷接口切片?

Go
慕工程0101907 2021-08-23 16:54:23
仍然是 Go 的新手。我正在嘗試按照我上一個問題的建議實施答案。在這種情況下,我有一個動物界面和一堆動物結構。我希望能夠遍歷每個動物并獲得它的語言。我已經嘗試了一個指針列表,但我不斷收到錯誤“y.language undefined(動物類型沒有字段或方法語言)”:package mainimport "fmt"type animal interface {    speak()}type dog struct{    language string}func (d *dog) speak() {    d.language = "woof"}var n = []animal{    &dog{},}func main() {    for _, w := range n{        x := &dog{}        fmt.Println(x)        x.speak()        fmt.Println(x.language)  // this works                fmt.Println(w)        y := w        y.speak()        fmt.Println(y.language)  // but this doesn't...why??    }}編輯#1:為了讓我的問題更清楚:為什么 x := &dog{} 有效但 y := w 無效?編輯 #2:不喜歡新手;(
查看完整描述

1 回答

?
喵喵時光機

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

錯誤是正確的。y := w聲明y為 type animal(因為您的nslice 為 type animal)。由于您的animal界面不包含language......它不知道該怎么做,因此這是一個錯誤。


您可以dog使用類型斷言斷言它實際上是一個指針:


fmt.Println(y.(*dog).language)

..但是,我不確定您要實現的目標。


當您引入一個cat也沒有language屬性的結構時,您的結構就會中斷。因此,這也會有類似的問題(并希望證明您的問題所在):


type cat struct{

}


func (c *cat) speak() {

    // do nothing

}

對“如何實現接口切片?”的問題的回答。- 您需要將您需要的任何內容添加到界面中,以便“一般地”處理項目。這意味著將language屬性轉換為Language()方法并通過實現animal接口的每個單獨對象返回它。


查看完整回答
反對 回復 2021-08-23
  • 1 回答
  • 0 關注
  • 214 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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