怎样进入当地建设局网站,网站商城功能,广州网站建设比较好的公司,南阳网站推广费用基础知识
在了解两者不同之前#xff0c;还是简单的回顾一下基础语法知识。下面的实例#xff0c;定义一个函数和方法#xff0c;然后调用函数和方法。
package mainimport fmt// 函数和方法
func function1() {fmt.Println(我是一个名字叫做function1的…基础知识
在了解两者不同之前还是简单的回顾一下基础语法知识。下面的实例定义一个函数和方法然后调用函数和方法。
package mainimport fmt// 函数和方法
func function1() {fmt.Println(我是一个名字叫做function1的函数)
}type User struct {name stringage uint
}func (u User) function1() {fmt.Println(我是一个名字叫做function1的方法)
}func main() {// 调用函数function1()// 调用方法User{}.function1()
}
执行上述代码go run main会打印出如下的结果
kertkertdeMBP ~/c/p/w/l/g/b/demo1 (master) go run demo5.go
我是一个名字叫做function1的函数
我是一个名字叫做function1的方法
通过上面示例代码我们可以大致得出几点结论。
调用函数时直接使用函数名即可(如果调用者和被调用者都在同一个包名下)调用方法需要实例化结构体然后通过结构体的方式去调用方法(结构体实例化有多种示例代码使用的是字面量的方式)。函数在定义时直接使用 func 函数名()即可方法在定义时需要使用 func (方法的接收者) 函数名()才可以。方法是通过.的方式进行调用而函数是直接使用函数名。
使用指针
接下来在函数和方法中使用指针大佬修改值的效果。
package mainimport fmt// 函数和方法
func function1(a *int) {*a 19
}type User struct {name stringage uint
}func (u *User) function1() {u.age 10
}func main() {a : 10function1(a)fmt.Println(函数function1运行结果为, a)user : User{age: 12, name: 张三}user.function1()fmt.Println(结构体user的结果是, user.age)
}
运行上诉代码查看一下执行效果。go run main。
kertkertdeMBP ~/c/p/w/l/g/b/demo1 (master) go run demo5.go
函数function1运行结果为 19
结构体user的结果是 10
上面代码中通过给函数传入一个指针修改形参a的值通过方法接收一个指针类型的接收者。都能够修改原值这一点不管是函数还是方法都没是一样的。
是否同名
接下来通过下面的实例代码来演示函数和方法是否支持定义相同的名称。
package mainimport fmt// 函数和方法
func function1(a *int) {*a 19
}func function1() {fmt.Println(随便打印一点东西)
}type User struct {name stringage uint
}func (u *User) function1() {u.age 10
}type Animal struct {name stringage uint
}func (u *Animal) function1() {u.age 10
}
仍然是运行上诉代码查看一下执行结果是怎么样的。go run main。
kertkertdeMBP ~/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类型外的其他任何类型。
函数不可以重名⽽⽅法可以重名
只要接受者不同则⽅法名可以⼀样。
调用方式不一样
方法是struct对象通过.点号名称来调用而函数是直接使用名称来调用。