在以下代码中:
type boolValue bool
func newBoolValue(val bool, p *bool) *boolValue {
*p = val
return (*boolValue)(p)
}
最后一行在做什么?
答案 0 :(得分:3)
The Go Programming Language Specification
转化是
T(x
形式的表达式,其中T
是一种类型x
是一个可以转换为T
类型的表达式。
type boolValue bool
func newBoolValue(val bool, p *bool) *boolValue {
*p = val
return (*boolValue)(p)
}
(*boolValue)(p)
正在进行从*bool
(类型p
)到*boolValue
的类型转换,即newBoolValue
函数返回值的类型。 Go需要显式转换。允许转换,因为bool
是boolValue
的基础类型。
如果您只是在没有转换的情况下编写return p
,编译器错误消息会解释问题:
return p
error: cannot use p (type *bool) as type *boolValue in return argument
答案 1 :(得分:1)
它将p
类型的变量*bool
强制转换为类型*boolValue
,以匹配返回参数值。否则会引发错误。
答案 2 :(得分:0)
类型是严格的去。如果您看到我为您的更改制作了以下程序,则输出将为*main.boolValue
类型。这就是您在return语句中将bool
类型转换为boolValue
类型的原因。
package main
import (
"fmt"
"reflect"
)
type boolValue bool
func main() {
var a bool = true
b := &a
rtnVal := newBoolValue(a, b)
fmt.Println("The type of rtnVal is ", reflect.TypeOf(rtnVal))
}
func newBoolValue(val bool, p *bool) *boolValue {
*p = val
return (*boolValue)(p)
}
输出:
The type of rtnVal is *main.boolValue