当前位置:网站首页>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
边栏推荐
猜你喜欢

JS封装防抖(代码持续优化)

防止数据冒用的方法

索引index

Information system project managers must memorize the core test sites (63) The main process of project portfolio management & DIPP analysis

Programmer's Exclusive Romance - Use 3D Engine to Realize Fireworks in 5 Minutes

Redis的下载安装

win10 outlook邮件设置

Ways to prevent data fraud

【面试高频题】可逐步优化的链表高频题

WPF implements a MessageBox message prompt box with a mask
随机推荐
LeetCode #101. 对称二叉树
推荐一个免费50时长的AI算力平台
电解电容漏电流及均压
网页控制台控制编辑框
Gumbel_Softmax 概要
WPF implements a MessageBox message prompt box with a mask
学长告诉我,大厂MySQL都是通过SSH连接的
Modify the VOT2018.json file and remove the color in the image path
Summary of learning stages (knapsack problem)
Web console control edit box
bat文件(批处理文件)运行时一闪而过解决方法
es6对象迭代器iterator
Installation of gdb 10.2
Redis高可用部署
Django 无法链接mysql数据库
PAT1007
Double pointer - the role of char **, int **
PAT1006
Visual Studio 2017 ASP.NET Framework MVC 项目 MySQL 配置连接
PAT1008