[英]Golang: Assigning a value to struct member that is a pointer
我正在嘗試為作為指針的結構成員分配一個值,但它在運行時給出“恐慌:運行時錯誤:無效的 memory 地址或零指針取消引用”......
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 的賦值,但為什么呢? 我如何將其設置為假?
為什么是錯誤? 因為一個指針只是指向。 它不會創建任何指向AT 的東西。 你需要這樣做。
如何將其設置為false? 這一切都取決於您為什么將其設為指針。
這個的每個副本都應該指向同一個布爾值嗎? 然后它應該在創建函數中分配一些空間。
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))
}
你可以想到的另一種方式是布爾值的零值是假的。
這不是很清楚,而是另一種方法。
https://play.golang.org/p/REbnJumcFi
我會推薦一個New()
func,它返回對初始化結構類型的引用。
您還可以執行以下操作:
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))
}
跟進 JTs Answer,我也建議使用new
的 function :
package main
import (
"fmt"
"strconv"
)
// Test
type stctTest struct {
blTest *bool
}
func main() {
strctTest := &stctTest{
blTest: new(bool),
}
*strctTest.blTest = true
fmt.Println("Test is " + strconv.FormatBool(*strctTest.blTest))
}
使用new()
初始化 memory 后,您可以直接為取消引用的指針賦值。 這樣您就不需要使用另一個變量來獲取地址。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.