返回

Go 函数使用细节和注意事项

后端

Go 函数的语法

func 函数名(参数列表) (返回值列表) {
    函数体
}
  • func 表示这是一个函数声明。
  • 函数名 是函数的名称,必须以字母开头,不能包含空格。
  • 参数列表 是函数的参数列表,参数类型和参数名用逗号分隔。
  • 返回值列表 是函数的返回值列表,返回值类型和返回值名用逗号分隔。
  • 函数体 是函数的代码块,用大括号括起来。

函数的参数

函数的参数可以是值传递或引用传递。值传递是指将参数的值复制给函数的局部变量,引用传递是指将参数的地址复制给函数的局部变量。默认情况下,函数的参数是值传递的。

如果需要引用传递,则需要在参数类型前加一个 * 号。例如:

func swap(a *int, b *int) {
    temp := *a
    *a = *b
    *b = temp
}

函数的返回值

函数的返回值可以是任何类型,包括基本类型、结构体、数组、切片、映射和函数类型。

如果函数没有返回值,则可以在返回值列表中写一个 ()。例如:

func sayHello() {
    fmt.Println("Hello, world!")
}

函数的作用域

函数的作用域是指函数内可以访问的变量的范围。函数的作用域包括函数体和函数内的嵌套函数。

函数内可以访问函数的参数、函数的局部变量和全局变量。如果函数内需要访问全局变量,则需要在函数内使用 global 关键字。例如:

var globalVariable int = 10

func main() {
    fmt.Println(globalVariable) // 输出:10
}

闭包

闭包是指可以访问其他函数作用域的变量的函数。闭包通常用于将数据或函数传递给其他函数。

以下是一个闭包的例子:

func outerFunction(x int) func() int {
    return func() int {
        return x + 1
    }
}

func main() {
    f := outerFunction(10)
    fmt.Println(f()) // 输出:11
}

匿名函数

匿名函数是指没有名称的函数。匿名函数通常用于作为回调函数或闭包。

以下是一个匿名函数的例子:

func main() {
    fmt.Println(func() int {
        return 10
    }()) // 输出:10
}

Go 函数使用注意事项

  • 函数名必须以字母开头,不能包含空格。
  • 函数的参数不能重复。
  • 函数的返回值类型和返回值名必须一一对应。
  • 函数体必须用大括号括起来。
  • 函数内不能使用其他函数的局部变量。
  • 函数内不能使用其他函数的返回值。
  • 函数内不能使用其他函数的闭包。
  • 函数内不能使用其他函数的匿名函数。