1.方法的基本使用
package main
import "fmt"
type Person struct {
Name string
}
type Integer int
func (i *Integer) change(a int)(ret int){
ret = a + 10
*i = *i + 1
return ret
}
func (p Person) test1(newName string) (ret string) {
p.Name = newName
return newName
}
func (p *Person) test2(newName string) (ret string) {
p.Name = newName
return newName
}
func factory (n string) *Person{
return &Person{
Name: n,
}
}
func main() {
p := Person {Name:"tom"}
fmt.Printf("1.p.Name:%v p的地址:%p\n", p.Name, &p)
res := p.test1("tom2")
fmt.Printf("2.test1返回結果:%v\n", res)
fmt.Printf("3.p.Name:%v\n", p.Name)
res2 := p.test2("tom3")
fmt.Printf("4.test2返回結果:%v\n", res2)
fmt.Printf("5.p.Name:%v\n", p.Name)
var i Integer = 10
fmt.Printf("6.i:%v\n", i)
res3 :=i.change(10)
fmt.Printf("7.res3:%v i:%v\n", res3, i)
p2 := factory("小明")
fmt.Printf("8.p2.Name:%v p2的地址:%p\n", p2.Name, &p2)
res4 := p2.test1("小張")
fmt.Printf("8.p2.Name:%v test1返回結果:%v\n", p2.Name, res4)
res5 := p2.test2("小李")
fmt.Printf("9.p2.Name:%v test2返回結果:%v\n", p2.Name, res5)
}
輸出
1.p.Name:tom p的地址:0xc000010200
2.test1返回結果:tom2
3.p.Name:tom
4.test2返回結果:tom3
5.p.Name:tom3
6.i:10
7.res3:20 i:11
8.p2.Name:小明 p2的地址:0xc00000e030
8.p2.Name:小明 test1返回結果:小張
9.p2.Name:小李 test2返回結果:小李