2 回答

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個(gè)贊
不,不是以這種方式。Go 是靜態(tài)類型的,需要在編譯時(shí)知道類型信息。
您可以做的是聲明result為 AdminResult 和 NormalResult 都滿足的某種類型的接口。然后,您可以在運(yùn)行時(shí)使用類型斷言來決定它是哪種類型的結(jié)果。
(你還必須result在 if 塊之外聲明,因?yàn)?Go 是塊范圍的)
type NormalResult struct {
Value int
}
func (r NormalResult) Result() int {
return r.Value
}
type AdminResult struct {
Value int
}
func (r AdminResult) Result() int {
return r.Value
}
type Resulter interface {
Result() int
}
func main() {
isAdmin := true
var r Resulter
if isAdmin {
r = AdminResult{2}
} else {
r = NormalResult{1}
}
fmt.Println("Hello, playground", r)
}
- 2 回答
- 0 關(guān)注
- 242 瀏覽
添加回答
舉報(bào)