为了账号安全,请及时绑定邮箱和手机立即绑定

如何查找未分配的结构字段

如何查找未分配的结构字段

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 中的每种数据类型都有自己的“零值”。所以,在Nonumber) 的情况下,它是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 关注
  • 124 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信