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返回结果:小李

猜你喜欢

转载自blog.csdn.net/qq_38165374/article/details/105317515