2

【笔记】Go语言的函数

 1 year ago
source link: https://loli.fj.cn/2023/01/17/Go%E8%AF%AD%E8%A8%80%E7%9A%84%E5%87%BD%E6%95%B0/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Go语言的函数学习笔记

函数的定义

  • 函数的作用域是全局的,可以在任意文件中写任意函数,可以在任意文件中调用任意函数
  • 函数定义时不需要考虑顺序

无参无返回值

func 函数名() {
...
}
func 函数名(参数名 数据类型) {
...
}
func 函数名(参数名1 数据类型, 参数名2 数据类型) {
...
}
func 函数名(args ...数据类型) {
for i := 0; i < len(args); i++ {
args[i]
}
}
传递不定参
func main() {
f1(1, 2)
}
func f1(args ...int) {
f2(args[0:]...)
}
func f2(args ...int) {

}

单个返回值

定义时不包含返回值名
func 函数名() 返回值类型 {

...

return 返回值
}
定义时包含返回值名
  • 如果定义了返回值的名,则返回时无需指定返回值,会自动返回对应名称的变量
func 函数名() (返回值名 返回值类型) {

...
返回值名 = 返回值值
return
}

多个返回值

func 函数名() (返回值名1 返回值类型, 返回值名2 返回值类型) {

...
返回值名1, 返回值名2 = 返回值值1, 返回值值2
return
}

函数的调用

无参无返回值

函数名()
函数名(参数列表)
变量名 := 函数名()
变量名1, 变量名2 := 函数名()

使用函数的类型

先定义类型然后使用函数类型

  • 将函数赋值给类型时,要求参数列表和返回值类型必须对应
  • 在赋值时不需要加(),在调用时需要加()
func 函数名(参数名 参数类型) 返回值类型 {}
// 定义类型
type 类型名 func(参数类型) 返回值类型
func main() {
// 使用类型
var 变量名 类型名 = 函数名
变量名(参数列表)
}

不定义类型直接使用函数类型

func 函数名(参数名 参数类型) 返回值类型 {}
func main() {
// 使用类型
var 变量名 函数名(参数类型) 返回值类型 = 函数名
变量名(参数列表)
}

自动类型推倒

  • 无需定义函数的类型
func main() {
// 使用类型
变量名 := 函数名
变量名(参数列表)
}

函数数据作用域

  • 如果程序中出现了相同的名称的变量
    • 如果本函数内有自己的变量,就使用本函数内的变量
    • 如果本函数内没自己的变量,就向上层寻找
  • 在函数内部定义的变量
  • 局部变量的作用域是当前函数及其子函数
  • 局部变量存储位置在内存中的栈区
func main() {
var 变量名 = 变量值
}
  • 在函数外部定义的变量
  • 全局变量的作用域是所有函数
  • 全局变量存储位置在内存中的数据区
  • 所有用const修饰的常量也在内存中的数据区存储
var 变量名 = 变量值

func main() {
...
}

函数的作用域

匿名内部函数

  • 函数内定义的函数
func main() {
// 定义匿名内部函数
{
...
}
}

哔哩哔哩——喔咔咔耶耶


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK