英文:
Casting pointer value expression
问题
我正在尝试弄清楚这个表达式的作用:
(*levelValue)(&level)
我不明白正在发生什么,它似乎首先对levelValue
进行解引用,但是由于levelValue
的类型是int32
,所以不确定为什么要这样做。
一些上下文如下:
import "flag"
type Level int32
type levelValue Level
// LevelFlag定义了一个具有指定名称、默认值和用法字符串的Level标志。
// 返回值是存储标志值的Level值的地址。
func LevelFlag(name string, defaultLevel Level, usage string) *Level {
level := defaultLevel
flag.Var((*levelValue)(&level), name, usage)
return &level
}
func (l *levelValue) Set(s string) error {
return (*Level)(l).UnmarshalText([]byte(s))
}
func (l *levelValue) String() string {
return (*Level)(l).String()
}
英文:
I'm trying to figure out what this expression does:
(*levelValue)(&level)
I don't understand what is happening, it seems like it dereferencing levelValue
first, but not sure why as the type of levelValue
is int32
Some context below
import "flag"
type Level int32
type levelValue Level
// LevelFlag defines a Level flag with specified name, default value and
// usage string. The return value is the address of a Level value that stores
// the value of the flag.
func LevelFlag(name string, defaultLevel Level, usage string) *Level {
level := defaultLevel
flag.Var((*levelValue)(&level), name, usage)
return &level
}
func (l *levelValue) Set(s string) error {
return (*Level)(l).UnmarshalText([]byte(s))
}
func (l *levelValue) String() string {
return (*Level)(l).String()
}
答案1
得分: 2
这是一种类型转换:
当你定义一个类型时,像这样:
type A B
你可以将类型为 B 的变量转换为类型 A,像这样:
b := B
a := A(b)
在你的情况下,类型 A
是 (*levelValue)
(括号是为了指定类型为指向 levelValue
的指针)。而变量 b
是 &level
(一个指向变量 level
的指针)。
英文:
This is a type conversion:
When you define a type like that
type A B
You can convert a variable of type B to type A like that:
b := B
a := A(b)
In your case, the type A
is (*levelValue)
(The parenthesis are needed to specify that the type is a pointer to a levelValue
. And the variable b
is &level
(A pointer that points to the variable level
)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论