返回值指针语法

时间:2017-05-16 11:05:52

标签: go

在以下代码中:

type boolValue bool

func newBoolValue(val bool, p *bool) *boolValue {
    *p = val
    return (*boolValue)(p)
}

最后一行在做什么?

3 个答案:

答案 0 :(得分:3)

  

The Go Programming Language Specification

     

Conversions

     

转化是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需要显式转换。允许转换,因为boolboolValue的基础类型。

如果您只是在没有转换的情况下编写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