Go中的struct之方法method初體驗
摘要:// code_017_struct_method_usage project main.go
package main
import (
"fmt"
)
type MyInt int
func (a MyInt) Add(b MyInt) MyInt {
re...
// 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 sexbyte ageint } 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} }