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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值