当前位置:网站首页>Golang学习之路(五):Golang的函数
Golang学习之路(五):Golang的函数
2022-08-09 11:54:00 【曲鸟】
一、函数
1. 语法
func 函数名( [参数] ) [返回值类型] {
函数体
}
2. 值传递
默认情况下,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
3. 引用(指针)传递
引用传递是将参数的内存地址传递到函数中,如果在函数中对该参数值进行了修改,那外层的该参数值也会被修改。
举例说明
现在定义一个函数接受一个参数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
二、函数用法
1. Golang中没有class
要知道的是,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)
}
2. 闭包
闭包可以理解为“定义在一个函数内部的函数“,闭包是一座用于连接函数内部和函数外部的桥梁
对于上面的第一个例子(输出结果如下):
我的名字是:曲鸟,我的年龄为: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())
}
3. Golang中函数传递函数
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
边栏推荐
猜你喜欢
随机推荐
PAT1001
wpf实现简易画板功能(带截取画板,签名截图等等)
索引index
Django cannot link mysql database
MySQL事务隔离级别
专业人士使用的 11 种渗透测试工具
PAT1009
MySQL查询性能优化七种武器之索引潜水
京东架构师呕心整理:jvm与性能调优有哪些核心技术知识点
Oracle Database Architecture
PAT1002
Summary of learning stages (knapsack problem)
BISS绝对值编码器_TI方案_线路延迟补偿
2022牛客多校(六)M. Z-Game on grid
MySQL执行sql语句的机制
win10右键文件,一直转圈
PM2 configuration file
Win10调整磁盘存储空间详解
【小程序】低代码+小游戏=小游戏可视化开发
微信支付开发流程