func 函数名( [参数] ) [返回值类型] {
函数体
}
默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。
1)求a和b两个参数值之和:
package main
import "fmt"
func main() {
result :=sum(1, 2)
fmt.Println("a+b之和为:",result)
}
func sum(a, b int) int {
return a+b
}
输出结果
a+b之和为: 3
2)Golang的函数返回值可以为多个:
package main
import "fmt"
func main() {
res1,res2 :=fuc(1, 2)
fmt.Println(res1,res2)
}
func fuc(a, b int) (int,int) {
return a+b,a-b
}
输出结果
3 -1
3)也可以无返回值:
package main
import "fmt"
func main() {
fuc(1, 2)
}
func fuc(a, b int) {
fmt.Println("传入的值为:",a,b)
}
输出结果
传入的参数为: 1 2
引用传递是将参数的内存地址传递到函数中,如果在函数中对该参数值进行了修改,那外层的该参数值也会被修改。
举例说明
现在定义一个函数接受一个参数a,在打印a的值后将a赋值为3
下面是值传递的写法:
package main
import "fmt"
func main() {
a :=1
fuc(a)
fmt.Println("值未被修改,还是为:",a)
}
func fuc(a int) {
fmt.Println("传入的值为:",a)
a=3
}
输出结果
传入的值为: 1
值未被修改,还是为: 1
下面是引用传递的写法:
package main
import "fmt"
func main() {
a :=1
fuc(&a)
fmt.Println("值被修改了,由1变为了:",a)
}
func fuc(a *int) {
fmt.Println("传入的值为:",*a)
*a=3
}
输出结果
传入的值为: 1
值被修改了,由1变为了 3
要知道的是,Golang中并没有Python、Java中的类(class)。Golang一切的一切都是函数,如果要实现一个class的话,可以这样写:
package main
import (
"fmt"
"strconv"
)
// Test 等于声明一个类
type Test struct {
name string
age int
}
func (tes *Test) print() string{
return "我的名字是:"+tes.name+",我的年龄为:"+strconv.Itoa(tes.age)
}
func main() {
obj := &Test{"曲鸟",18} //初始化并赋值
b := obj.print()
fmt.Println(b)
}
输出结果
我的名字是:曲鸟,我的年龄为:18
类中函数带参数的写法:
func (tes *Test) sum(a,b int) string{//求a+b的和
return "a+b="+strconv.Itoa(a+b)
}
func main() {
obj := &Test{"曲鸟",18}
b := obj.sum(3,3)
fmt.Println(b)
}
闭包可以理解为“定义在一个函数内部的函数“,闭包是一座用于连接函数内部和函数外部的桥梁
对于上面的第一个例子(输出结果如下):
我的名字是:曲鸟,我的年龄为:18
使用闭包可以这样写:
package main
import (
"fmt"
"strconv"
)
func add(name string, age int) func() string {
return func() string { //相当于下面main中的obj
return "我的名字是:" + name + ",我的年龄为:" + strconv.Itoa(age)
}
}
func main() {
obj := add("曲鸟", 18)
fmt.Println(obj())
}
Golang可以将函数作为变量的值
package main
import (
"fmt"
)
func add9(a int) int {//
return a+9
}
func main(){
a := func(x int) int { //将该函数赋值给a
return add9(6)
}
fmt.Println("a+9的值为:",a(9))
}
输出结果
a+9的值为: 15
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/momoda118/article/details/121249861
内容来源于网络,如有侵权,请联系作者删除!