时间:2021-05-23
golang 函数以及函数和方法的区别
在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。到底什么意思呢。
首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例
func main() {fmt.Println("Hello go")}在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。
package mypackageimport ( "fmt")var I intfunc init() { I = 0 fmt.Println("Call mypackage init1")}func init() { I = 1 fmt.Println("Call mypackage init2")}package mainimport ( "demo/mypackage" "fmt")func main() { fmt.Println("Hello go.... I = ", mypackage.I)}运行结果:
我们可以看到,程序为我们自动调用了两个init函数,并且是按照顺序调用的。
下面来看方法。
运行结果:
我们可以看到方法和函数的区别,方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。
这里的接收者和c++中的this指针有一些相似,我们可以把接受者当作一个class,而这些方法就是类的成员函数,当接收者为指针类型是就是c++中的非const成员函数,为非指针时就是const成员函数,不能通过此方法改变累的成员变量。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
其实最近看了不少Golang接口以及方法的阐述都有一个地方没说得特别明白。就是在Golang编译隐式转换传递给方法使用的时候,和调用函数时的区别。我们都知道,在
参考阅读:详解js中Number()、parseInt()和parseFloat()的区别详解JS转换数值函数Number()、parseInt()、parse
简评:函数是一个组织在一起语句集合,以执行特定任务。Swift函数类似于简单C函数以及复杂的ObjectiveC语言函数。它使我们能够通过函数调用内部的局部和全
一、constructorconstructor的值是一个函数。在JavaScript中,除了null和undefined外的类型的值、数组、函数以及对象,都有
函数是一个组织在一起语句集合,以执行特定任务。Swift函数类似于简单C函数以及复杂的ObjectiveC语言函数。它使我们能够通过函数调用内部的局部和全局参数