golang中的条件变量声明?

是否可以在 Golang 中进行这样的条件变量类型声明?


if isAdmin {

  var result NormalResult

} else {

  var result AdminResult

}


// do something to &result

doSomething(&result)


func doSomething(interface{}) {

  // something

}

以上不起作用,但想法是 normalResult 和 adminResults 是非常相似的结构,我将如何去做?


慕运维8079593
浏览 212回答 2
2回答

猛跑小猪

不,不是以这种方式。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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go