创建函数
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"
}