带有接收者的函数就叫做方法

1.方法的介绍:带有接收者的函数就叫做方法。
普通函数Func xxx(){}
匿名函数func (){
}
方法(method)的函数func (xxx type) xxx(){
}
2.封装的思想:无需知道如何工作,开动就可以。
3.面向过程和面向对象函数的区别
package main

import “log”

//实现两数相加
//面向过程
func Add01(a,b int) int{
return a+b
}
//面向对象,方法:给某个类型绑定一个函数
type long int
//tmp叫接收者,接收者就是传递得一个参数
func (tmp long)Add02(other long) long{//
return tmp+other
}

func main() {
var result int
result= Add01(0,1)//普通函数的调用方式
log.Println(“result=”,result)
//定义一个变量
var a long = 2
//调用方法格式:变量名.函数(所需参数)
result1:=a.Add02(3)
log.Println(“result1=”,result1)
//面向对象只是换了表现形式,本质上是没有区别的
}
4.为结构体类型添加方法
package main

import “log”

type Person struct {
name string
age int
sex byte
}
//带有接收者类型叫做方法
func (tmp Person)PrintInfo() {
log.Println(“tmp=”,tmp)
}
//通过一个函数给成员赋值
//指针类型
func (p *Person) SetInfo(n string,s byte,a int) {
p.name =n
p.age =a
p.sex = s
}
func main() {
//定义同时初始化
p:=Person{“hualong”,20,‘m’}
p.PrintInfo()
//定义一个结构体变量
var p2 Person
(&p2).SetInfo(“youyou”,‘m’,15)
p2.PrintInfo()
}
5.方法的使用总结
package main

import “log”

type Person struct {
name string
age int
sex byte
}
//带有接收者类型叫做方法
func (tmp Person)PrintInfo() {
log.Println(“tmp=”,tmp)
}
//通过一个函数给成员赋值
func (p *Person) SetInfo(n string,s byte,a int) {
p.name =n
p.age =a
p.sex = s
}

type long int

func (tmp long)test() {

}
func (tmp *long)test02() {

}
type pointer *int
//接收者的本身不可以是指针
//pointer为接收者类型,本身不能是指针类型
/*func (tmp pointer)test() {

}
*/
type char byte
//函数这个方法就是同名一样(test)接收者类型不一样就不会冲突出现错误
func (tmp char)test() {

}
func main() {
//定义同时初始化
p:=Person{“hualong”,20,‘m’}
p.PrintInfo()
//定义一个结构体变量
var p2 Person
(&p2).SetInfo(“youyou”,‘m’,15)
p2.PrintInfo()
}
6.值语义和引用语义
package main

import (
“log”
)

type Person struct {
name string
sex byte
age int
}
//接收者,参数为普通变量,非指针,值语义,一份拷贝
func (p Person) SetInfoValue(n string,s byte,a int) {

p.name =n
p.sex = s
p.age =a
log.Printf(“SetInfoValue &p=%p\n”,&p)
}
//接收者为指针变量,引用传递
func (p *Person) SetInfoPointer(n string,s byte,a int) {
p.name =n
p.sex = s
p.age =a
log.Printf(“SetInfoPointer p=%p\n”,p)
}
func main() {
s1:=Person{“xixi”,‘m’,19}
log.Printf("&s1=%+v\n",&s1)//打印地址
//值语义
s1.SetInfoValue(“hualong”,‘m’,20)
log.Printf(“s1=%+v\n”,s1)//打印内容
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值