Go语言学习之struct(The way to go)

时间:2023-01-01 22:20:04

生命不止,继续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