我试图给一个指针结构体成员赋值,但是它给出了“panic:运行时错误:运行时内存地址无效或空指针取消引用”...
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?
4条答案
按热度按时间h9vpoimq1#
为什么会出错呢?因为指针只能指向,不能创建指向 AT 的内容,你需要这样做。
如何将其设置为false?这完全取决于 * 为什么 * 将其设置为指针。
它的每个副本都应该指向同一个bool吗?那么它应该在创建函数中分配一些空间。
用户是否应该将其指向自己的布尔值?那么应该在创建对象时手动设置。
aiqt4smr2#
另一种说法是布尔值的零值为假。
这不是那么清楚,而是另一种方法。
https://play.golang.org/p/REbnJumcFi
我建议使用
New()
函数,它返回对初始化的结构类型的引用。jw5wzhpr3#
您还可以执行以下操作:
https://play.golang.org/p/OWSosQhrUql
yhived7q4#
根据JTs Answer,我还建议使用
new
函数,如下所示:用
new()
初始化内存后,可以直接给解引用的指针赋值,这样就不需要再用另一个变量来获取地址。https://go.dev/play/p/BmekoTalQVh