Go语言自学系列 | golang函数的参数
视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》
一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客
go语言函数可以有0或多个参数,参数需要指定数据类型。
声明函数时的参数列表叫做形参,调用时传递的参数叫做实参。
go语言是通过传值的方式传参的,意味着传递给函数的是拷贝后的副本,所以函数内部访问、修改的也是这个副本。
go语言可以使用变长参数,有时候并不能确定参数的个数,可以使用变长参数,可以在函数定义语句的参数部分使用ARGS...TYPE的方式。这时会将...代表的参数全部保存到一个名为ARGS的slice中,注意这些参数的数据类型都是TYPE。
go语言函数的参数实例
go语言传参
// 形参列表
func f1(a int, b int) int {if a > b {return a} else {return b}
}func main() {// 实参列表r := f1(1, 2)fmt.Printf("r: %v\n", r)
}
演示参数传递,按值传递
package mainimport "fmt"func f1(a int) {a = 200fmt.Printf("a1: %v\n", a)
}func main() {a := 100f1(a)fmt.Printf("a: %v\n", a)
}
运行结果
[Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
a1: 200
a: 100
从运行结果可以看到,调用函数f1后,a的值并没有被改变,说明参数传递是拷贝了一个副本,也就是拷贝了一份新的内容进行运算。
map、slice、interface、channel这些数据类型本身就是指针类型的,所以就算是拷贝传值也是拷贝的指针,拷贝后的参数仍然指向底层数据结构,所以修改它们可能会影响外部数据结构的值。
package mainimport "fmt"func f1(a []int) {a[0] = 100
}func main() {a := []int{1, 2}f1(a)fmt.Printf("a: %v\n", a)
}
运行结果
[Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
a: [100 2]
从运行结果发现,调用函数后,slice内容被改变了。
变长参数
package mainimport "fmt"func f1(args ...int) {for _, v := range args {fmt.Printf("v: %v\n", v)}
}
func f2(name string, age int, args ...int) {fmt.Printf("name: %v\n", name)fmt.Printf("age: %v\n", age)for _, v := range args {fmt.Printf("v: %v\n", v)}
}
func main() {f1(1, 2, 3)fmt.Println("------------")f1(1, 2, 3, 4, 5, 6)fmt.Println("------------")f2("tom", 20, 1, 2, 3)
}
运行结果
[Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
v: 1
v: 2
v: 3
------------
v: 1
v: 2
v: 3
v: 4
v: 5
v: 6
------------
name: tom
age: 20
v: 1
v: 2
v: 3
Go语言自学系列 | golang函数的参数相关推荐
- Go语言自学系列 | golang函数的返回值
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang 函数
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang结构体作为函数参数
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang标准库bufio
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang方法
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang标准库log
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang标准库os模块 - File文件读操作
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang递归
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
- Go语言自学系列 | golang开发vscode快捷键
视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...
最新文章
- 考前自学系列·计算机组成原理·常见的数据寻址方式(地址码,操作数位置)
- 【CyberSecurityLearning 49】PHP与MySQL进行交互
- 微信公众号开发 重要 access_token {errcode:40164,errmsg:invalid ip 114.221.159.11, not in whitelist hint:
- ENVI计算公式(一)
- Java中的位运算符、移位运算
- PostgreSQL 插入、删除、更新、事务
- C++基础09-货物售卖和MyArray实现
- [转] Silverlight Navigation(多页面切换、传值)
- sqlserver空间数据 + c# 实现查询附近的设备
- C++ 採集音频流(PCM裸流)实现录音功能
- Java分页工具实现方法
- c语言system title,system() – C语言库函数
- AI智能尺寸测量仪简介(图像尺寸测量仪)
- 设置、取消word英文首字母大写
- 编译原理 | 实验四 | 逆波兰式
- 支持向量机是怎么画分类平面的?
- 根据日期计算属于第几周(周日是一周的第一天)
- Python 深度学习目标检测结果可视化
- java 反射驻足类型_《Java虚拟机规范》阅读(三):Class文件格式
- 多线程、机械硬盘、固态硬盘、内存映射相关资料
热门文章
- Charles在夜神抓包APP无法联网
- 对内置的String类详解.
- windows vim使用tagbar TagbarToggle报错,Tagbar: Exuberant ctags not found! Please downloa
- 推动量子计算与AI融合,飞桨成为中国首个支持量子机器学习的深度学习平台...
- 切图?切图!——切图仔htmlcss秃头指南
- Mysql面试大全,看完可以吊打面试官
- GeoGebra笔记10 :Sequence序列
- 中国土地市场爬虫——浏览器cookie验证(图片验证码)
- 不止是刷题——leetcode笑死人的评论合集,独乐乐不如众乐乐~~
- arduino控制小车转向_同济大学2020年创新制作成果展示 (势能小车项目)