go学习part10(2)

本章主要学习  方法  的概念

1.方法概念

理解:方法相当于cpp的类的成员函数

但是这个成员函数是和某个类型绑定了。

a相当于是一个形参,代表调用对象,这里是一个值传递,内部修改不会影响外部

package main

import "fmt"

type Person struct {
	Name string
}

// Person绑定方法test
func (p Person) test() {
	fmt.Println("test函数", p.Name)
}

func main() {
	var p,q Person
	p.Name = "PPP"
	q.Name = "QQQ"
	p.test()
	q.test()
}

结果:  

tips:        

2.向函数传指针类型可以影响外部对象

1)传值

package main

import "fmt"

type Person struct {
	Name string
}

// Person绑定方法test
func (p Person) test() {

	fmt.Println("test函数", p.Name)
}
func (p Person) test2() {
	p.Name = "AAA"
	fmt.Println("test2函数", p.Name)
}

func main() {
	var p, q Person
	p.Name = "PPP"
	q.Name = "QQQ"
	p.test()
	q.test()
	//传值  
	p.test2()
	fmt.Println("test2函数调用后", p.Name)

}

2)传指针

package main

import "fmt"

//函数传指针改外部变量

type Person struct {
	Name string
}

// Person绑定方法test
func (p *Person) test() {
	fmt.Println("test函数", p.Name)
}

func (p *Person) test2() {
	p.Name = "AAA"
	fmt.Println("test2函数", p.Name)
}

func main() {
	var p, q Person
	p.Name = "PPP"
	q.Name = "QQQ"
	(&p).test()
	(&q).test()

	//传指针可以达到修改效果
	(&p).test2()
	fmt.Println("test2函数调用后", p.Name)

}

 可以看出外部的p属性Name被test2()修改了

3)go编译器优化

3.其他自定义类型也可以绑定方法,不止struct

 

4.包访问权限和类的String()方法

package main

import "fmt"

//String()方法,在print这个类型的时候自动调用
type Student struct {
	Name string
	Age  int
}

func (s *Student) String() string {
	str := fmt.Sprintf("Name = %v, Age =%v", s.Name, s.Age)
	return str
}

func main() {
	var s *Student = &Student{ "SSS",36 }
	fmt.Println(s)
}

5.函数和方法的一些区别

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值