详解Go函数和方法之间有什么区别
基础知识
在了解两者不同之前,还是简单的回顾一下基础语法知识。下面的实例,定义一个函数和方法,然后调用函数和方法。
package main import "fmt" // 函数和方法 func function1() { fmt.Println("我是一个名字叫做function1的函数") } type User struct { name string age uint } func (u User) function1() { fmt.Println("我是一个名字叫做function1的方法") } func main() { // 调用函数 function1() // 调用方法 User{}.function1() }
执行上述代码,go run main
,会打印出如下的结果:
kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
我是一个名字叫做function1的函数
我是一个名字叫做function1的方法
通过上面示例代码,我们可以大致得出几点结论。
1、调用函数时,直接使用函数名即可(如果调用者和被调用者都在同一个包名下);调用方法,需要实例化
结构体,然后通过结构体的方式去调用方法(结构体实例化有多种,示例代码使用的是字面量的方式)。
2、函数在定义时,直接使用 func + 函数名()
即可;方法在定义时,需要使用 func (方法的接收者) + 函数名()
才可以。
3、方法是通过"."的方式进行调用,而函数是直接使用函数名。
使用指针
接下来,在函数和方法中使用指针大佬修改值的效果。
package main import "fmt" // 函数和方法 func function1(a *int) { *a = 19 } type User struct { name string age uint } func (u *User) function1() { u.age = 10 } func main() { a := 10 function1(&a) fmt.Println("函数function1运行结果为", a) user := User{age: 12, name: "张三"} user.function1() fmt.Println("结构体user的结果是", user.age) }
运行上诉代码,查看一下执行效果。go run main
。
kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
函数function1运行结果为 19
结构体user的结果是 10
上面代码中,通过给函数传入一个指针,修改形参a的值;通过方法接收一个指针类型的接收者。都能够修改原值,这一点不管是函数还是方法,都没是一样的。
是否同名
接下来,通过下面的实例代码,来演示函数和方法是否支持定义相同的名称。
package main import "fmt" // 函数和方法 func function1(a *int) { *a = 19 } func function1() { fmt.Println("随便打印一点东西") } type User struct { name string age uint } func (u *User) function1() { u.age = 10 } type Animal struct { name string age uint } func (u *Animal) function1() { u.age = 10 }
仍然是运行上诉代码,查看一下执行结果是怎么样的。go run main
。
kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
# command-line-arguments
./demo5.go:10:6: function1 redeclared in this block
./demo5.go:6:6: other declaration of function1
可以通过运行结果得出如何结论。
1、函数的名称是不能重复的,不管是传递的参数还是返回的参数是否相同,函数名称都不允许重复定义。
2、方法的名称是可以重复的,前提是方法的接收者不能相同。
总结
含义不同
1、函数function是⼀段具有独⽴功能的代码,可以被反复多次调⽤,从⽽实现代码复⽤。⽽⽅法method是⼀个类的⾏为功能,只有该类的对象才能调⽤。
⽅法有接受者,⽽函数⽆接受者
1、Go语⾔的⽅法method是⼀种作⽤于特定类型变量的函数,这种特定类型变量叫做Receiver(接受者、接收者、接收器); 2、接受者的概念类似于传统⾯向对象语⾔中的this或self关键字; 3、Go语⾔的接受者强调了⽅法具有作⽤对象,⽽函数没有作⽤对象; 4、⼀个⽅法就是⼀个包含了接受者的函数; 5、Go语⾔中, 接受者的类型可以是任何类型,不仅仅是结构体, 也可以是struct类型外的其他任何类型。
函数不可以重名,⽽⽅法可以重名
1、只要接受者不同,则⽅法名可以⼀样。
调用方式不一样
1、方法是struct对象通过.点号+名称来调用,而函数是直接使用名称来调用。
到此这篇关于详解Go函数和方法之间有什么区别的文章就介绍到这了,更多相关Go函数和方法区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
golang创建文件目录os.Mkdir,os.MkdirAll的区别说明
本文主要讲述os.Mkdir、os.MkdirAll区别以及在创建文件目录过程中的一些其他技巧,希望对大家有所帮助。一起跟随小编过来看看吧2021-03-03
最新评论