Struct 结构';golang中的s零值
以下是示例代码:Struct 结构';golang中的s零值,struct,go,Struct,Go,以下是示例代码: 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{} el
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
关于varelea
和ele2:=A{}
因此,结构的零值不是nil
,而是所有属性都初始化为零值的结构。猜对了吗
如果猜测是正确的,那么var ele A
和ele2:=A{}
的性质是相同的,是正确的吗?为什么要在有
当通过声明或调用new为变量分配存储时,或当通过复合文字或调用make创建新值时,且未提供显式初始化时,将为变量或值提供默认值
此类变量或值的每个元素的类型设置为零值:
对于布尔型false
对于整数0
对于浮动0.0
用于字符串”
- 指针、函数、接口、切片、通道和映射的
nil
请注意,无法将结构值设置为
nil
(但可以将指向结构的指针的值设置为nil
)。展示了@Denys séguret的一流答案。此类变量或值的每个元素的类型()都设置为零值:
主程序包
输入“fmt”
func main(){
//布尔人错了,
var bl bool//false
//0表示数字类型,
int//0中的var
//”“对于弦,
var st string/“”
//指针、函数、接口、通道为零,
var pi*int//
var ps*字符串//
var fu func()//检查错误。https://stackoverflow.com/a/56663166/12817546
var-ir接口{}//
var ch chan string//
fmt.Println(基本法、内定法、圣约翰法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法、皮氏法
//切片,和地图。
var sl[]int//true
var mp映射[int]字符串//真
var pm*映射[int]字符串//
fmt.Printf(“%v%v%v\n”,sl==nil,mp==nil,pm)
}
我不认为得票最多的答案是明确的,因此这里有一个更清楚的解释:
“如果未指定值,数组或结构的元素的字段将为零。此初始化以递归方式完成:”
本文档是否涵盖了简单结构的情况还不清楚。
package main
import "fmt"
func main() {
// false for booleans,
var bl bool // false
//0 for numeric types,
var in int // 0
// "" for strings,
var st string // ""
// and nil for pointers, functions, interfaces, channels,
var pi *int // <nil>
var ps *string // <nil>
var fu func() // <nil> Go vet error. https://stackoverflow.com/a/56663166/12817546
var ir interface{} // <nil>
var ch chan string // <nil>
fmt.Println(bl, in, st, pi, ps, fu, ir, ch)
// slices, and maps.
var sl []int // true
var mp map[int]string // true
var pm *map[int]string // <nil>
fmt.Printf("%v %v %v\n", sl == nil, mp == nil, pm)
}