Go ရဲ့ structs ဆိုတာက type မတူတဲ့ values တွေကို ပေါင်းစည်းတဲ့နေရာမှာသုံးတယ်။
အထူးသဖြင့် ကိုယ်ပိုင် data type တွေဖန်တီးတဲ့အချိန်မှာအသုံးပြုကြတယ်။
|
package main
|
|
import "fmt"
|
ဒီမှာဆို person struct type ထဲမှာ name နှင့် age ဆိုတဲ့ field တွေရှိတယ်။
|
type person struct {
name string
age int
}
|
ဒီ newPerson function မှာဆိုရင် name ပေးပီးတော့ person struct တခုတည်ဆောက်လိုက်တယ်။
|
func newPerson(name string) *person {
|
local variable ဖြစ်လို့ pointer ကို စိတ်ချလက်ချ return ပေးလို့ရတယ်။
local variable က ပျောက်မသွားဘူး။
|
p := person{name: name}
p.age = 42
return &p
}
|
|
func main() {
|
ဒီ syntax က struct အသစ်တခုတည်ဆောက်လိုက်တယ်။
|
fmt.Println(person{"Bob", 20})
|
struct ကို initialize လုပ်နေတဲ့အချိန်မှာ name fields တွေကိုသတ်မှတ်ပေးလို့ရတယ်။
|
fmt.Println(person{name: "Alice", age: 30})
|
age ကိုမသတ်မှတ်ထားဘူးဆို zero default ဖြစ်သွားမယ်။
|
fmt.Println(person{name: "Fred"})
|
ဒီနေရာမှာ & prefix ကိုသုံးထားတာက person data ရဲ့ address ကိုပေးထားတာ။
data ကိုပေးထားတာမဟုတ်ဘူး။ struct ရဲ့ pointer ပေါ့။
|
fmt.Println(&person{name: "Ann", age: 40})
|
Go မှာ person struct တခုတည်ဆောက်တော့မယ်ဆိုရင် constructor function
တခ ုတည်ဆောက်ပီးသုံးရမယ် တိုက်ရိုက်မသုံးရဘူးဆိုပီးလက်ခံထားကြတယ်။
|
fmt.Println(newPerson("Jon"))
|
struct fields တွေကို access လုပ်မယ်ဆို dot နဲ့လုပ်တယ်။
|
s := person{name: "Sean", age: 50}
fmt.Println(s.name)
|
struct pointer တွေသုံးမယ်ဆိုလဲ dot ကိုသုံးလို့ရတယ်။
pointer တွေရဲကနေ data ကိုယူတာကို GO ကနောက်ကွယ်ကနေလုပ်ပေးလိမ့်မယ်။
|
sp := &s
fmt.Println(sp.age)
|
Structs တွေက mutable (ပြောင်းလဲနိုင်တယ်)
|
sp.age = 51
fmt.Println(sp.age)
}
|