是否可以在 Golang 中进行这样的条件变量类型声明?if isAdmin { var result NormalResult} else { var result AdminResult}// do something to &resultdoSomething(&result)func doSomething(interface{}) { // something}以上不起作用,但想法是 normalResult 和 adminResults 是非常相似的结构,我将如何去做?
2 回答
猛跑小猪
TA贡献1858条经验 获得超8个赞
不,不是以这种方式。Go 是静态类型的,需要在编译时知道类型信息。
您可以做的是声明result为 AdminResult 和 NormalResult 都满足的某种类型的接口。然后,您可以在运行时使用类型断言来决定它是哪种类型的结果。
(你还必须result在 if 块之外声明,因为 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 关注
- 211 浏览
添加回答
举报
0/150
提交
取消