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()
}
}
- 1 回答
- 0 關(guān)注
- 113 瀏覽
添加回答
舉報(bào)