標籤:receive 基類 體驗 pointer byte 方法 person 結構 return
// code_017_struct_method_usage project main.gopackage mainimport ( "fmt")type MyInt intfunc (a MyInt) Add(b MyInt) MyInt { return a + b}func Add(a, b MyInt) MyInt { return a + b}type Person struct { name string sex byte age int}func (p Person) PrintInfo() { fmt.Println(p.name, p.age)}func (p *Person) SetInfoPointer() { (*p).name = "god_girl" p.sex = 1 p.age = 22}func (p Person) SetInfoValue() { p.name = "god_like" p.sex = 1 p.age = 23}func main() { /* 帶有接收者的函數,我們稱之為方法(method).本質上,一個方法則是一個和特殊類型關聯的函數。 func (receiver ReceiverType) funcName(parameters){results} 1)參數 receiver 可任意命名。如方法中未曾使用,可省略參數名。 ?參數 receiver 類型可以是 T 或 *T。基底類型 T 不能是介面或指標。 ?不支援重載方法,也就是說,不能定義名字相同但是不同參數的方法。 2)在Go語言中,可以給任意自訂類型(包括內建類型,但不包括指標類型)添加相應的方法。 */ //1) 基本使用 var a MyInt = 1 var b MyInt = 1 fmt.Println("a.Add(b)=", a.Add(b)) fmt.Println("Add(a,b)=", Add(a, b)) //2)結構體作為接收者 p := Person{"ck_god", 0, 18} p.PrintInfo() //3)結構體的值語義和引用語義 p1 := Person{"wanglaoji", 0, 27} fmt.Println("函數調用前= ", p1) (&p1).SetInfoPointer() fmt.Println("函數調用後=", p1) fmt.Println("==========================") p2 := Person{"ck_god", 0, 18} fmt.Println("函數調用前 = ", p2) p2.SetInfoValue() fmt.Println("函數調用後 = ", p2) //函數調用後 = {mike 109 18}}
Go中的struct之方法method初體驗