生命不止,继续Go go go.
今天跟大家分享一些golang中的struct。
定义
package main
import "fmt"
type Vertex struct {
X int
Y int
}
func main() {
fmt.Println(Vertex{1, 2})
}
type Circle struct { x, y, r float64 }
初始化
var c Circle
default set to zero. For a struct zero means each of the fields is set to their corresponding zero value :
0 for ints
0.0 for floats
“” for strings
nil for pointers)
通过new
c := new(Circle)
c := Circle{0, 0, 5}
使用_补位
type Circle struct {
_ float64
y float64
r float64
}
直接定义匿名结构变量
u := struct {
name string
age byte
}
匿名字段
type attr struct { perm int }
type file struct { name string attr }
获取结构体的某个字段
fmt.Println(c.x, c.y, c.r)
c.x = 10
c.y = 5
空结构
var a struct{}
var b [100]{}
println(unsafe.Sizeof(a), unsafe.Sizeof(b))
输出:0 0
字段标签
字段标签并不是注释,用来对字段进行描述的元数据。
package main
import "fmt"
import "reflect"
type user struct{
name string "昵称"
sex byte "性别"
}
func main(){
u := user{"Mike", 1}
v := reflect.ValueOf(u)
t := v.Type()
for i, n:=0, t.NumField(); i < n; i++ {
fmt.Printf("%s: %v\n", t.Field(i).Tag, v.Field(i))
}
}
输出:
昵称: Mike
性别: 1