Golang:为作为指针的struct成员赋值

时间:2017-05-05 18:31:02

标签: pointers go struct

我正在尝试为作为指针的struct成员分配一个值,但它在运行时给出“恐慌:运行时错误:无效的内存地址或nil指针取消引用”...

package main

import (
    "fmt"
    "strconv"
)

// Test
type stctTest struct {
    blTest *bool
}

func main() {

    var strctTest stctTest
    *strctTest.blTest = false

    fmt.Println("Test is " + strconv.FormatBool(*strctTest.blTest))

}

运行时错误似乎来自于使用* strctTest.blTest = false赋值,但为什么呢?如何将其设置为false?

2 个答案:

答案 0 :(得分:7)

为什么会出错?因为指针只指向。它没有创建指向 AT 的任何内容。你需要这样做。

如何将其设置为false?这一切都取决于为什么你把它作为一个指针。

这个副本应该指向同一个bool吗?然后应该在创建函数中分配一些空间。

func NewStruct() *strctTest {
    bl := true
    return &strctTest{
        blTest: &bl,
     }
}

用户是否应该将其指向自己的布尔值?然后应该在创建对象时手动设置它。

func main() {
    myBool := false
    stctTest := strctTest{
        blTest: &myBool
    }

    fmt.Println("Test is " + strconv.FormatBool(*strctTest.blTest))

}

答案 1 :(得分:0)

您还可以执行以下操作:

package main

import (
    "fmt"
    "strconv"
)

// Test
type stctTest struct {
    blTest *bool
}

func main() {

    strctTest := stctTest{
        blTest: &[]bool{true}[0],
    }

    fmt.Println("Test is " + strconv.FormatBool(*strctTest.blTest))

}

https://play.golang.org/p/OWSosQhrUql