跳到主要内容

创建函数

main 函数

程序需要有main函数,如果是包,则不需要main函数 main函数通过os包传入参数

package main

import (
"fmt"
"os"
"strconv"
)

func main() {
number1, _ := strconv.Atoi(os.Args[1])
number2, _ := strconv.Atoi(os.Args[2])
fmt.Println("Sum:", number1+number2)
}

运行程序时

go run main.go 3 5

自定义函数

下面是用于创建函数的语法:

func name(parameters) (results) {
body-content
}

请注意,使用func关键字来定义函数,然后为其指定名称。 在命名后,指定函数的参数列表。 你可以指定零个或多个参数。 你还可以定义函数的返回类型,该函数也可以是零个或多个。

重构上一节的代码,为自定义函数中的数字求和。 我们将使用以下代码:

package main

import (
"fmt"
"os"
"strconv"
)

func main() {
sum := sum(os.Args[1], os.Args[2])
fmt.Println("Sum:", sum)
}

func sum(number1 string, number2 string) int {
int1, _ := strconv.Atoi(number1)
int2, _ := strconv.Atoi(number2)
return int1 + int2
}

在 Go 中,你还可以为函数的返回值设置名称,将其当作一个变量。 例如,你可以重构如下 sum 函数:

func sum(number1 string, number2 string) (result int) {
int1, _ := strconv.Atoi(number1)
int2, _ := strconv.Atoi(number2)
result = int1 + int2
return
}

结果值括在括号中,只需在末尾添加 return 行。在函数末尾编写 return 关键字非常简单方便,尤其是在有多个返回值时。但不建议使用此方法。 可能不确定函数将返回什么

返回多个值

在 Go 中,函数可以返回多个值。 你可以采用类似于定义函数参数的方式来定义这些值。 换句话说,你可以指定一个类型和名称,但该名称是可选的。

例如,假设你想要创建一个函数,以将两个数字求和,又让它们相乘。 函数代码将如下所示:

func calc(number1 string, number2 string) (sum int, mul int) {
int1, _ := strconv.Atoi(number1)
int2, _ := strconv.Atoi(number2)
sum = int1 + int2
mul = int1 * int2
return
}

你现在需要两个变量来存储函数的结果。 (否则就不会进行编译。)它的外观如下所示:

package main

import (
"fmt"
"os"
"strconv"
)

func main() {
sum, mul := calc(os.Args[1], os.Args[2])
fmt.Println("Sum:", sum)
fmt.Println("Mul:", mul)
}

Go 的另一个有趣功能是,如果不需要函数的某个返回值,可以通过将返回值分配给 变量来放弃该函数。 变量是 Go 忽略返回值的惯用方式。 它允许程序进行编译。 因此,如果只需要求和,则可以使用以下代码:

package main

import (
"fmt"
"os"
"strconv"
)

func main() {
sum, _ := calc(os.Args[1], os.Args[2])
fmt.Println("Sum:", sum)
}

更改函数参数值(指针)

在 Go 中,有两个运算符可用于处理指针:

  • & 运算符使用其后对象的地址。
  • * 运算符取消引用指针。 你可以前往指针中包含的地址访问其中的对象。

指针的工作方式:

package main

import "fmt"

func main() {
firstName := "John"
updateName(&firstName)
fmt.Println(firstName)
}

func updateName(name *string) {
*name = "David"
}