结构体是什么
type Movie struct {
Name string
Rating float32
}
- 关键字
type
指定一种新类型 - 将新类型的名称指定为Movie
- 类型名右边是数据类型,这里为结构体
- 在大括号内,使用名称和类型指定了一系列数据字段
创建结构体
type Movie struct{
Name stirng
Rating float32
}
#创建结构体变量
var m Movie
如果没有初始化,创建结构体时,则Go将会把每个数据字段设置为相应数据类型的零值
//给结构体赋值
m.Name="me"
m.Rating=0.99
package main
import "fmt"
func main(){
type Movie struct{
Name string
}
var a Movie
a.Name = "me"
fmt.Println(a)
}
// {me}
可以使用new
来创建结构体
type movie struct{
Name string
}
//创建结构体
m = new(movie)
//使用简短变量赋值来创建结构体
c := movie{Name : "me" }
//使用简短变量赋值
c := movie("me")
嵌套结构体
type superhero struct{
Name string
Address address
}
type address struct{
Number int
}
自定义结构体数据字段的默认值
在有些时候,我们可以通过函数的方式来给结构体创建默认值
package main
import "fmt"
type superhero struct{
Name string
}
func newSuperhero() superhero{
a := superhero{Name:"siqu"}
return a
}
func main(){
fmt.Printf("%+v\n",newSuperhero())
}
// {Name:siqu}
比较结构体
当结构体类型相同的时候才能进行比较,不相同时不能进行比较,否则会发生错误
理解共有和私有值
根据GO语言约定,结构体及其数据字段都可能被导出,也可能不导出,如果一个标识符的首字母是大写的,那么它将被导出;否则不会导出
要导出结构体及其字段,结构体及其字段的名称都必须以大写字母打头
区分指针引用和值引用
package main
import "fmt"
type superhero struct{
Name string
}
func main(){
//复制一个相同的结构体
a := superhero{Name : "siqu"}
b := a
fmt.Println("结构体a:",a)
fmt.Println("结构体b",b)
b.Name ="boke"
fmt.Println("结构体a:",a)
fmt.Println("结构体b",b)
}
// 结构体a: {siqu}
// 结构体b {siqu}
// 结构体a: {siqu}
// 结构体b {boke}
由结果可知,使用b :=a
的方式,是获得结构体的一个副本,而不是另外一个引用
package main
import "fmt"
type superhero struct{
Name string
}
func main(){
//复制一个相同的结构体
a := superhero{Name : "siqu"}
b := &a
fmt.Println("结构体a:",a)
fmt.Println("结构体b",b)
b.Name ="boke"
fmt.Println("结构体a:",a)
fmt.Println("结构体b",*b)
}
// 结构体a: {siqu}
// 结构体b &{siqu}
// 结构体a: {boke}
// 结构体b {boke}
可以利用&
符号获取指针引用
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容