为了账号安全,请及时绑定邮箱和手机立即绑定

golang中的条件变量声明?

golang中的条件变量声明?

Go
慕运维8079593 2021-06-27 10:06:09
是否可以在 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)


}


查看完整回答
反对 回复 2021-07-05
  • 2 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信