首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

聊一聊Go语言中的零值,它有什么用?

哈喽,大家好,我是asong。今天与大家聊一聊Go语言中的零值。大学时期我是一名C语言爱好者,工作了以后感觉Go语言和C语言很像,所以选择了Go语言的工作,时不时就会把这两种语言的一些特性做个比较,今天要比较的就是零值特性。熟悉C语言的朋友知道在C语言中默认情况下不初始化局部变量。未初始化的变量可以包含任何值,其使用会导致未定义的行为;如果我们未初始局部变量,在编译时就会报警告 C4700,这个警告指示一个Bug,这个Bug可能导致程序中出现不可预测的结果或故障。而在Go语言就不会有这样的问题,Go语言的设计者吸取了在设计C语言时的一些经验,所以Go语言的零值规范如下:

02

go的struct的使用

package main import ( "fmt" "reflect" ) //跟C语言或其它语言一样,也有结构体struct。C语言中用关键词typedef来给结构体定义,Go中用的都是type。struct 语法格式:type typeName struct {...} ,按照对象的理解:struct就是类,函数就是方法。 type person struct { name string age int32 } type course []string type student struct { name string age int32 grade string } type class struct { student //匿名字段,struct course //匿名字段,自定义类型 int32 //内置类型做完匿名字段 teacher string } type goods struct { name string "goods_name" price float64 "goods_price" } func main() { //单独声明和赋值 var p1 person p1.name = "zengzhihai" p1.age = 40 //直接声明和赋值 p2 := person{"xiaogao", 20} //通过 field:value 的方式初始化,这样可以任意顺序 p3 := person{age: 22, name: "xiaoqing"} fmt.Println(p1, p2, p3) stu1 := class{student: student{"xiaoming", 18, "高三"}, teacher: "杰伦"} //修改course字段 stu1.course = make([]string, 6) stu1.course[0] = "math" stu1.course = append(stu1.course, "china") //修改匿名内置字段 stu1.int32 = 5 fmt.Println(stu1) g := &goods{"zhuihui", 40} s := reflect.TypeOf(g).Elem() //通过反射获取type的定义 for i := 0; i < s.NumField(); i++ { fmt.Println(s.Field(i).Tag) // 讲tag打印出来 } }

02
领券