本文介绍: 含义不同函数function是⼀段具有独⽴功能的代码,可以被反复多次调⽤,从⽽实现代码复⽤。⽽⽅法method是⼀个类的⾏为功能,只有该类的对象才能调⽤。⽅法有接受者,⽽函数⽆接受者Go语⾔的⽅法method是⼀种作⽤于特定类型变量的函数,这种特定类型变量叫做Receiver(接受者、接收者、接收器);接受者的概念类似于传统⾯向对象语⾔中的this或self关键字;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()
}
kert@kertdeMBP ~/c/p/w/l/g/b/demo1 (master)> go run demo5.go
我是一个名字叫做function1的函数
我是一个名字叫做function1的方法
- 调用函数时,直接使用函数名即可(如果调用者和被调用者都在同一个包名下);调用方法,需要实例化结构体,然后通过结构体的方式去调用方法(结构体实例化有多种,示例代码使用的是字面量的方式)。
- 函数在定义时,直接使用 func + 函数名()即可;方法在定义时,需要使用 func (方法的接收者) + 函数名()才可以。
- 方法是通过”.”的方式进行调用,而函数是直接使用函数名。
使用指针
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)
}
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
总结
含义不同
函数function是⼀段具有独⽴功能的代码,可以被反复多次调⽤,从⽽实现代码复⽤。⽽⽅法method是⼀个类的⾏为功能,只有该类的对象才能调⽤。
⽅法有接受者,⽽函数⽆接受者
- Go语⾔的⽅法method是⼀种作⽤于特定类型变量的函数,这种特定类型变量叫做Receiver(接受者、接收者、接收器);
- 接受者的概念类似于传统⾯向对象语⾔中的this或self关键字;
- Go语⾔的接受者强调了⽅法具有作⽤对象,⽽函数没有作⽤对象;
- ⼀个⽅法就是⼀个包含了接受者的函数;
- Go语⾔中, 接受者的类型可以是任何类型,不仅仅是结构体, 也可以是struct类型外的其他任何类型。
函数不可以重名,⽽⽅法可以重名
- 只要接受者不同,则⽅法名可以⼀样。
原文地址:https://blog.csdn.net/ldxxxxll/article/details/134757204
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_47080.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。