首页 文章

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

提问于
浏览
2

我正在尝试为作为指针的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 回答

  • 6

    为什么这是一个错误?因为指针只指向 . 它没有创造任何指向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

    您可以想到的另一种方法是布尔值的零值为false .

    这不是那么清楚,而是另一种方法 .

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

    我建议 New() func返回对初始化结构类型的引用 .

相关问题