golang函数和方法的区别

golang函数和方法的使用和区别


go语言的函数和方法的定义和使用都有一定的区别,但方法不过是一种特殊的函数。

一.函数

函数声明包含一个函数名,参数列表, 返回值列表和函数体。如果函数没有返回值,则返回列表可以省略。函数从第一条语句开始执行,直到执行return语句或者执行函数的最后一条语句。

// 类型相同的相邻参数,参数类型可合并。多返回值必须用括号。
//(func 声明函数  test函数名  第一个括号里:传入参数  第二个括号:返回参数 )
func test(x int, y string) (a int, b string) {
	a = x
	b = y
	return a, b //必须返回一致
}

func main() {
	//调用函数test 传入1和"test", 接受返回参数对应到res1,res2
	res1, res2 := test(1, "test")
	fmt.Printf("res1类型%T , res1值%d\n", res1, res1)
	fmt.Printf("res2类型%T , res2值%s", res2, res2)
}

运行结果

res1类型int , res1值1
res2类型string , res2值test

  1. 函数可以没有参数或接受多个参数。

  2. 注意类型在变量名之后 。

  3. 当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略。

  4. 函数可以返回任意数量的返回值。

二.方法

一个方法就是一个包含了接受者的函数。

接收者可以是自己定义的一个类型,这个类型可以说struct ,interface,甚至我们可以重定义基本数据类型。不过需要注意的是接收者是指针和非指针的区别,我们可以看到当接收者为指针时,可以通过方法改变该接收者的属性,但是非指针类型做不到(地址传递和值传递的区别)。

//定义一个结构体类型
type Tester struct {
	age  int
	name string
}
//方法的定义在声明后面多了一个接收者
// func (recevier type) methodName(参数列表)(返回值列表){}
func (t Tester) method(x int, y string) (a int, b string) {
	a = x + t.age
	b = y + t.name
	return a, b
}

func main() {
	// 调用 method 方法我们需要一个 Tester 类型的值或者指针
	test := Tester{18, "狗蛋"}
	res3, res4 := test.method(1, "李")
	fmt.Printf("res3类型%T , res3值%d\n", res3, res3)
	fmt.Printf("res4类型%T , res4值%s", res4, res4)
}

运行结果

res3类型int , res3值19
res4类型string , res4值李狗蛋

  1. 对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递,反之亦然。

  2. 对于方法(如struct的方法),接收者为值类型时,可以直接用指针类型的变量调用方法,反过来同样也可以。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值