服务器之家

服务器之家 > 正文

golang 函数以及函数和方法的详解及区别

时间:2020-05-06 10:50     来源/作者:lqh

golang 函数以及函数和方法的区别

在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。到底什么意思呢。

首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例

?
1
2
3
4
5
6
7
func main()
 
{
 
fmt.Println("Hello go")
 
}

在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package mypackage
 
import (
 "fmt"
)
 
var I int
 
func init() {
 I = 0
 fmt.Println("Call mypackage init1")
}
 
func init() {
 I = 1
 fmt.Println("Call mypackage init2")
}
?
1
2
3
4
5
6
7
8
9
10
package main
 
import (
 "demo/mypackage"
 "fmt"
)
 
func main() {
 fmt.Println("Hello go.... I = ", mypackage.I)
}

运行结果:

golang 函数以及函数和方法的详解及区别

我们可以看到,程序为我们自动调用了两个init函数,并且是按照顺序调用的。

下面来看方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main
 
import "fmt"
 
type myint int
 
//乘2
func (p *myint) mydouble() int {
 *p = *p * 2
 return 0
}
 
//平方
func (p myint) mysquare() int {
 p = p * p
 fmt.Println("mysquare p = ", p)
 return 0
}
 
func main() {
 var i myint = 2
 i.mydouble()
 fmt.Println("i = ", i)
 i.mysquare()
 fmt.Println("i = ", i)
}

运行结果:

golang 函数以及函数和方法的详解及区别

我们可以看到方法和函数的区别,方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。

这里的接收者和c++中的this指针有一些相似,我们可以把接受者当作一个class,而这些方法就是类的成员函数,当接收者为指针类型是就是c++中的非const成员函数,为非指针时就是const成员函数,不能通过此方法改变累的成员变量。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/d_guco/article/details/53575067

标签:

相关文章

热门资讯

沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意
沙雕群名称大全2019精选 今年最火的微信群名沙雕有创意 2019-07-07
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
超A是什么意思 你好a表达的是什么
超A是什么意思 你好a表达的是什么 2019-06-06
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
返回顶部