当前位置: 首页 > 面试题库 >

Golang中Struct的零值

宗意蕴
2023-03-14
问题内容

这是示例代码:

package main

import (
    "fmt"
)

type A struct {
    Name string
}

func (this *A) demo(tag string) {
    fmt.Printf("%#v\n", this)
    fmt.Println(tag)
}

func main() {
    var ele A
    ele.demo("ele are called")

    ele2 := A{}
    ele2.demo("ele2 are called")
}

运行结果:

&main.A{Name:""}
ele are called
&main.A{Name:""}
ele2 are called

看起来这些var ele Aele2 := A{}

因此,结构的零值不是nil,而是所有属性均初始化为零值的结构。猜对了吗?

如果猜测是正确的,那么的自然var ele Aele2 := A{}是一样的吧?


问题答案:

为什么要(正确地)猜测有一些文档?

当通过声明或调用new为变量分配存储空间时, 或者通过复合文字或make调用 创建新值时 ,并且未提供显式初始化时
,将给出变量或值默认值。

此类变量或值的每个元素的类型均设置为零值

  • false 对于布尔,
  • 0 对于整数,
  • 0.0 对于花车
  • "" 对于字符串,
  • 以及nil指针,函数,接口,切片,通道和映射。

该初始化是递归完成的,因此,例如,如果未指定任何值,则结构数组的每个元素的字段都将为零。

请注意,无法将struct值设置为nil(但是您可以将指向struct的指针的值设置为nil)。



 类似资料:
  • 问题内容: 因此,我在解析golang中的数据时遇到了一些麻烦: } 使用此结构时,我可以很容易地输出它。 但是,一旦我将“ Gateways [] struct”分离成自己的结构,它就会返回一个空数组… 完整来源。 问题答案: 您的函数存在问题,您正在调用作为第一个参数传递,这是一个包名:这是模棱两可的。 如您所见,代码可以很好地更改函数。 输出:

  • 问题内容: IEEE754支持负零。但是这段代码 输出 我本来期望的 浮动格式基于IEEE754的其他语言可让您创建负零文字 Java的: C# : Javascript: 但是我在Go中找不到等效项。 您如何在go中编写一个负零文字? 问题答案: 有一个已注册的问题。 碰巧提供了一种解决方案: 还不错,因为它显然引用了定义的标准函数。 但这意味着您需要导入一个软件包,而对于(当然较小且很少见的)

  • 本文向大家介绍golang struct 实现 interface的方法,包括了golang struct 实现 interface的方法的使用技巧和注意事项,需要的朋友参考一下 golang中,一般strcut包含 interface类型后,struct类型都需要实现 interface导出的接口,从而成为相应的 interface接口类。 实际上,struct包含interface之后,并不需

  • 本文向大家介绍Golang学习笔记(六):struct,包括了Golang学习笔记(六):struct的使用技巧和注意事项,需要的朋友参考一下 struct struct,一组字段的集合,类似其他语言的class 放弃了大量包括继承在内的面向对象特性,只保留了组合(composition)这个最基础的特性 1.声明及初始化 2.struct的匿名字段(继承) 能够实现字段继承,当字段名重复的时候,

  • 本文向大家介绍golang中struct和[]byte的相互转换示例,包括了golang中struct和[]byte的相互转换示例的使用技巧和注意事项,需要的朋友参考一下 在网络传输过程中,经常会这样处理:socket接收到数据,先获取其消息头,然后再做各种不同的业务处理。在解析消息头的时候的方法有多种多样。其中最为高效解析消息头的方法就是直接把数据头部分强制类型转换为对应的消息头结构体。这种做法

  • 本文向大家介绍golang中struct和interface的基础使用教程,包括了golang中struct和interface的基础使用教程的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍了关于golang中struct和interface的相关内容,是属于golang的基本知识,下面话不多说了,来一起看看详细的介绍吧。 struct struct 用来自定义复杂数据结构,可以