英文:
Use a literal value to refer to constant in Golang
问题
我已经定义了一个带有类型的常量。我想使用一个变量的值来引用这个常量。(请参考下面的代码)。
一种方法是定义一个键到所需值的映射。还有其他方法可以实现这个吗?
import (
"fmt"
"reflect"
)
type Code int
const (
MY_CONST_KEY Code = 123
)
func main() {
x := "MY_CONST_KEY"
//获取x的值作为123
}
英文:
I have defined a constant with a type. I want to use the value of a variable to refer to the constant. (Please refer to the code below).
One way would be to define a map of Key to the required Value. Is there another approach to do this ?
import (
"fmt"
"reflect"
)
type Code int
const (
MY_CONST_KEY Code = 123
)
func main() {
x := "MY_CONST_KEY"
//Fetch Value of x as 123
}
答案1
得分: 4
你所要求的是无法实现的。你不能将常量传递给反射包,只能传递它们的字面值。
正如你正确提到的,你可以使用一个映射(map):
package main
import "fmt"
type Code int
var codes = map[string]Code{
"MY_CONST_KEY": 123,
"ANOTHER_CONST_KEY": 456,
}
func main() {
x := codes["MY_CONST_KEY"]
fmt.Println(x)
}
如果确保映射(map)未导出(codes
中的小写c
),那么它只能在你的包内部使用,因此包的使用者无法在运行时修改映射。
英文:
There is no way to do what you are asking. You cannot pass constants to the reflect package without instead passing their literal value.
As you correctly mentioned, you can use a map:
package main
import "fmt"
type Code int
var codes = map[string]Code{
"MY_CONST_KEY": 123,
"ANOTHER_CONST_KEY": 456,
}
func main() {
x := codes["MY_CONST_KEY"]
fmt.Println(x)
}
If you make sure the map is not exported (lower case c
in codes
), then it will only be available inside your package, so consumers of your package cannot modify the map at runtime.
答案2
得分: 0
代替将x赋值为字符串"MY_CONST_KEY",你可以使用x := MY_CONST_KEY
package main
import (
"fmt"
)
type Code int
const (
MY_CONST_KEY Code = 123
)
func main() {
x := MY_CONST_KEY
fmt.Println(x) // 这将输出x的值为123
}
英文:
Instead of assigning x to a string, "MY_CONST_KEY", you can do x := MY_CONST_KEY
package main
import (
"fmt"
)
type Code int
const (
MY_CONST_KEY Code = 123
)
func main() {
x := MY_CONST_KEY
fmt.Println(x) // This fetch the value of x as 123
}
答案3
得分: -1
> 一种方法是定义一个键到所需值的映射。
是的,请这样做。
> 还有其他方法吗?
没有。
英文:
> One way would be to define a map of Key to the required Value.
Yes, do that.
> Is there another approach to do this ?
No.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论