跳转到主要内容
模块 3 · 第 1 课(共 5)课程中的11/50~10 min
模块课程(1/5)

签名及参数

在 Go 中,函数是用 func 声明的。签名语法不同 来自 C/Java:类型位于参数名称之后,用 a 分隔 空间。这是一个读起来更好的选择——“n of type int” “int n”。

基本语法

Go
func sum(a int, b int) int {
    return a + b
}

func greet(name string) {
    fmt.Println("ciao", name)
}

没有返回值的函数只是省略返回类型。

相同类型的连续参数

如果多个连续参数共享相同类型,则可以声明 它只在最后一个上出现过一次。这是惯用的,你会在任何地方看到它:

Go
func sum(a, b int) int { return a + b }
func max3(a, b, c float64) float64 { /* ... */ }
func parse(s, sep string, limit int) []string { /* ... */ }

导出函数与未导出函数

在 Go 中,可见性由名称决定:以标识符开头 带有大写字母的已导出(从其他包中可见), 其他的对于包来说是私有的。

Go
func Sum(a, b int) int { ... }    // esportata
func helper() { ... }              // privata al package

函数作为值

函数是一流的值:您可以分配它们,传递它们,并且 返回它们。我们将在有关闭包的课程中深入探讨。

Go
op := sum            // op ha tipo func(int, int) int
fmt.Println(op(2, 3)) // 5

main 和 init:两个特殊名称

  • func main() 是 main 包的入口点。没有争论, 无返回值。
  • func init() 在包启动时自动调用(甚至多个 如果多个文件定义一个文件,则为 1 次)。对于设置很有用;谨慎使用它。

尝试一下

锻炼#go.m3.l1.e1
尝试:0加载中...

定义一个返回 a+b 的函数 sum(a, b int) int,然后在 main 中使用 (3, 4) 调用它。

正在加载编辑器...
显示提示

共享类型:`(a, b int)`。返回类型位于括号之后。

3 次尝试后可用的解决方案

锻炼#go.m3.l1.e2
尝试:0加载中...

定义打印“ciao <name>”的greet(name string)(无返回值)。

正在加载编辑器...
显示提示

如果函数不返回任何内容,则没有返回类型。

3 次尝试后可用的解决方案

Quiz#go.m3.l1.e3
准备好

Go 中的参数类型在哪里?

Go
func f(? ?) {}
答案选项

回顾

  • func name(param type, ...) returnType { ... }。
  • 在姓名后输入;相同类型的连续参数 → 仅声明一次。
  • 大写首字母 = 已导出; 小写 = 包私有。
  • 功能是一流的(可分配、可通过)。
  • main 和 init 是具有特殊语义的保留名称。