gpt4 book ai didi

go - golang中的条件变量声明?

转载 作者:IT老高 更新时间:2023-10-28 13:09:08 24 4
gpt4 key购买 nike

在 Golang 中可以做这样的条件变量类型声明吗?

if isAdmin {
var result NormalResult
} else {
var result AdminResult
}

// do something to &result
doSomething(&result)

func doSomething(interface{}) {
// something
}

上述方法不起作用,但想法是 normalResult 和 adminResults 是非常相似的结构,我该如何做呢?

谢谢!

最佳答案

不,不是这种方式。 Go 是静态类型的,需要在编译时知道类型信息。

您可以做的是将 result 声明为 AdminResult 和 NormalResult 都满足的某种类型的接口(interface)。然后,您可以在运行时使用类型断言来决定它是哪种类型的结果。

(您还必须在 if block 之外声明 result,因为 Go 是 block 作用域)

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)

}

关于go - golang中的条件变量声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19279954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com