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

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

golang 類型切換中的多個(gè)案例

golang 類型切換中的多個(gè)案例

Go
天涯盡頭無女友 2022-04-20 17:52:17
當(dāng)我運(yùn)行下面的代碼片段時(shí),它會(huì)引發(fā)錯(cuò)誤a.test undefined (type interface {} 是沒有方法的接口)看來類型切換沒有生效。package mainimport (    "fmt")type A struct {    a int}func(this *A) test(){    fmt.Println(this)}type B struct {    A}func main() {    var foo interface{}    foo = A{}    switch a := foo.(type){        case B, A:            a.test()    }}如果我將其更改為    switch a := foo.(type){        case A:            a.test()    }現(xiàn)在好了。
查看完整描述

1 回答

?
胡子哥哥

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

這是規(guī)范定義的正常行為(強(qiáng)調(diào)我的):


TypeSwitchGuard 可能包含一個(gè)簡(jiǎn)短的變量聲明。當(dāng)使用該形式時(shí),變量在每個(gè)子句中隱式塊的開頭聲明。在僅列出一種類型的 case 子句中,變量具有該類型;否則,變量具有 TypeSwitchGuard 中表達(dá)式的類型。


所以,其實(shí)類型切換確實(shí)生效了,只是變量a保持了類型interface{}。


解決此問題的一種方法是斷言具有foo方法test(),它看起來像這樣:


package main


import (

    "fmt"

)


type A struct {

    a int

}


func (this *A) test() {

    fmt.Println(this)

}


type B struct {

    A

}


type tester interface {

    test()

}


func main() {

    var foo interface{}

    foo = &B{}

    if a, ok := foo.(tester); ok {

        fmt.Println("foo has test() method")

        a.test()

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-04-20
  • 1 回答
  • 0 關(guān)注
  • 113 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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