Go | 函数注意事项
本篇收录至Golang专栏,持续更新,欢迎访问😊
细节汇总
- 函数的形参列表可以是多个,返回值列表也可以是多个
- 形参列表和返回值列表的数据类型,可以是值类型、也可以是引用类型
- 函数的命名遵循标识符命名规范,首字母不能是数字,首字母大写表示该函数可以被本包文件和其它文件使用,类似public;首字母小写只能被本包文件使用,类似private。
- 函数中的变量是局部的,外部不能访问。作用域
- 基本数据类型和数组都是值传递的,即进行值拷贝。在函数内修改,不会影响到原来的值,
- 如果希望函数内的变量能够修改函数外的变量,可以传入变量的地址(**&),函数内以指针的方式操作变量,从效果上看类似引用**
- Go函数不支持函数重载。
- 在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量是一个函数类型的变量,通过该变量可以对函数调用。
- 函数既然是一种数据类型,因此在Go中,函数也可以作为形参,并且调用。(回调函数)
- 为了简化数据类型定义,Go支持自定义数据类型
语法: type 自定数据类型名 数据类型 // (相当于一个别名)
案例: type myInt int // 这时,myInt就等价于int来使用了
type mySum func(int, int) int // 这时,mySum就等价于func(int, int) int - 支持对函数返回值命名(可以不受返回值顺序限制)
- 使用 _ 下划线标识符,忽略返回值。(占位符)
- Go支持可变参数
值传递和指针传递
1 | func test(n1 int) { |
什么是重载
重载: 函数名相同,但是形参不同或者数据类型不同的情况
Golang语言中是不支持传统的函数重载的,fn redeclared in this block
Golang语言是支持可变参数的,空接口的形式
函数类型的变量
类型: func(int, int) int
1 | func getSum(n1 int, n2 int) int { |
函数作为形参传入
1 | func getSum(n1 int, n2 int) int { |
自定义数据类型
- 自定义函数数据类型, 相当于起了一个别名
1 | type mySum func(int, int) int |
- 自定义数据类型
1 | // main函数下 |
- 定义的类型: 包名.类型名,如:
utils.myInt
1
2
3
4
5
6
7
8
9
10
11
12
13// 以下是utils包
package utils
import "fmt"
func TestFn() string {
fmt.Println("TestFn 函数被调用")
type myInt int
var n myInt = 10
fmt.Printf("n的类型:%T 值:%v", n, n) // n的类型:utils.myInt 值:10
return "hahaha"
}
返回值命名
1 | func sumSub(n1 int, n2 int) (sum int, sub int) { |
可变参数
基本语法
1、支持零到多个参数func sum(args... int) {}
2、支持1到多个参数func sum(n1 int, args... int) {}
args:就是一个承接的变量名,可以自定义,如:func sum(n1 int, **vars**... int) {}
说明:
- args是slice切片,通过
args[index]
可以访问到各个值 - args必须放到形参列表的最后面
参数个数可变
1 | func sumV2(n1 int, args ...int) int { |
练习
交换变量a, b的值
1 | package main |
我是 甜点cc☭
微信公众号:【看见另一种可能】
热爱前端开发,也喜欢专研各种跟本职工作关系不大的技术,技术、产品兴趣广泛且浓厚。本号主要致力于分享个人经验总结,希望可以给一小部分人一些微小帮助。
希望能和大家一起努力营造一个良好的学习氛围,为了个人和家庭、为了我国的互联网物联网技术、数字化转型、数字经济发展做一点点贡献。数风流人物还看中国、看今朝、看你我。