go語言學習筆記七 方法,工廠函數使用

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
}


// p爲結構體Person創建的變量
// 方法內修改屬性的值,不會影響外部的值
func (p Person) test1(newName string) (ret string) {
	// p參數可以不使用
	p.Name = newName
	return newName
}

// 傳入的爲Person的指針 內部修改值,外部也會修改
func (p *Person) test2(newName string) (ret string) {
	p.Name = newName
	return newName
}
// 工廠函數 返回Person的指針
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返回結果:小李

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章