struct 介紹

基本設定

type Circle struct {
  x float64
  y float64
  r float64
}

與 JSON 結合

omitempty 表示,若此欄位無值,則此欄位會消失。為了避免處理上困難,建議少用此參數。
 Name string `json:"name,omitempty" xml:"name"

初始化

var c Circle

c := new(Circle)  // 使用 new 方式初始化

c := Circle{x: 0, y: 0, r: 5}  // 初始化+設定值
c := Circle{0, 0, 5}  // 依照順序給值&初始化

使用

  • 透過 . 來存取
fmt.Println(c.x, c.y, c.r)
c.x = 10
c.y = 5
  • 透過 reflect 取值
import "reflect"

cPtr := reflect.ValueOf(&c)
cVal := cPtr.Elem()
for i := 0; i < cVal.NumField(); i++ {
   val := cVal.Field(i)  // 取得值
}

增加Methods函數(Methods)

// 等同為 c 增加一個 method: area()
func (c *Circle) area() float64 {
    return math.Pi * c.r*c.r
}

fmt.Println(c.area())  // 輸出
  • 範例二
type Person struct {
    name string
}

func (Person) New(name string) *Person {
    return &Person{name}
}