// code_017_struct_method_usage project main.go
package main
import (
"fmt"
)
type MyInt int
func (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() {
/*
帶有接收者的函數(shù),我們稱之為方法(method).本質(zhì)上,一個方法則是一個和特殊類型關(guān)聯(lián)的函數(shù)。
func (receiver ReceiverType) funcName(parameters){results}
1)參數(shù) receiver 可任意命名。如方法中未曾使用,可省略參數(shù)名。
?參數(shù) receiver 類型可以是 T 或 *T?;愋?T 不能是接口或指針。
?不支持重載方法,也就是說,不能定義名字相同但是不同參數(shù)的方法。
2)在Go語言中,可以給任意自定義類型(包括內(nèi)置類型,但不包括指針類型)添加相應(yīng)的方法。
*/
//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)結(jié)構(gòu)體作為接收者
p := Person{"ck_god", 0, 18}
p.PrintInfo()
//3)結(jié)構(gòu)體的值語義和引用語義
p1 := Person{"wanglaoji", 0, 27}
fmt.Println("函數(shù)調(diào)用前= ", p1)
(&p1).SetInfoPointer()
fmt.Println("函數(shù)調(diào)用后=", p1)
fmt.Println("==========================")
p2 := Person{"ck_god", 0, 18}
fmt.Println("函數(shù)調(diào)用前 = ", p2)
p2.SetInfoValue()
fmt.Println("函數(shù)調(diào)用后 = ", p2) //函數(shù)調(diào)用后 = {mike 109 18}
}
標(biāo)題名稱:Go中的struct之方法method初體驗(yàn)
文章轉(zhuǎn)載:
http://weahome.cn/article/gpjjjj.html