亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何查找未分配的結構字段

如何查找未分配的結構字段

Go
哈士奇WWW 2023-05-04 17:45:44
type Student struct{    Name string    No int}student:=Student{    Name:"Lily",}那么,我怎么知道學生的字段“否”沒有分配呢?
查看完整描述

5 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

如果你定義No為整數,那么如果它沒有被賦值,golang 會將它設置為0(默認值),這有時會根據你使用它的目的而造成混淆(例如,if0是 的有效值No)。


如果你真的想檢查是否Student.No已分配。我認為最好使用Pointer。


type Student struct{

? ? Name string

? ? No *int

}


student:= Student{

? ? Name:"Lily",

}


if student.No == nil {

? ? fmt.Println("student.No is not defined")

}


student2 := Student{

? ? Name: "Bob",

? ? No: func(i int) *int{ return &i}(5),

}


if student2.No != nil {

? ? fmt.Printf("student.No is %d\n", *student2.No)

}


查看完整回答
反對 回復 2023-05-04
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

您將變量定義為指針變量


type Student struct{

    Name string

    No *int

}


student:=Student{

    Name:"Lily",

}

在這種情況下,如果你這樣做


if student.No==nil{

    fmt.Println("Yes I'm unassigned")

}

它會打印


Yes I'm unassigned

我們可以在解組 json 時使用這種技術,以查明是否提供了一個字段,以及在掃描可為 null 的值表單數據庫時。要取回價值,您必須使用


*student.NO 


查看完整回答
反對 回復 2023-05-04
?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

該字段將具有該數據類型的零值。在本例中為 0。您的支票將如下所示:

student.No == 0

起初這看起來有點奇怪。但在這種情況下,0作為數字的 a 作為有效的學生編號沒有意義。


查看完整回答
反對 回復 2023-05-04
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

Go 中的每種數據類型都有自己的“零值”。所以,在No(?number) 的情況下,它是0.?您可以檢查 的值是否No0。


查看完整回答
反對 回復 2023-05-04
?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

如果不手動比較結構的每個字段,就沒有其他方法可以檢查是否設置了某個值。


這就是為什么在stdlib許多包中都有方法的原因New...。


例如bufio.NewWriter(),包的作者負責根據自己的用例使用一些合理的默認值初始化結構。


// NewStudent returns new Student instance

func NewStudent() *Student {

    return &Student{Name: "defaultName", No: 7}

}

即使Student導出類型,您的包用戶也應該New...使用任何結構。


還有另一種方法可以解決這個問題,但對于許多程序來說可能過于復雜,但您可以在此處和此處閱讀有關它們的信息。


查看完整回答
反對 回復 2023-05-04
  • 5 回答
  • 0 關注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號