Go的函数
在本教程中,我们将学习Golang中的函数,并希望在本教程结束时,您将牢牢掌握它们是什么以及如何在您自己的项目中使用它们。
我们将在本教程中介绍以下主题:
- 函数声明的基础知识
- 使用多个返回值
##函数的声明 Go中的所有函数都以func关键字开始,然后是函数名称。在名称之后,我们打开括号并定义我们的参数列表,后跟一个非常相似的返回结果列表:
func name(parameter-list) (result-list) {
// 函数体
}
访问权限!如果您希望在其他包中访问您的函数,那么您必须将函数名称的第一个字母设为大写!
##举个栗子 对于这个例子,我们将创建一个名为myFunction的函数,它将接收2个字符串参数并返回结果字符串:
func myfunction(firstName string, lastName string) (string) {
fullname := firstName + " " + lastName
return fullname
}
在函数体的第一行,我们创建了一个名为fullname的新变量,它是我们的firstName变量与空格和我们的lastName变量连接成的新字符串。完成此连接后,我们将返回fullname变量。
##完整的代码
package main
import (
"fmt"
)
func myfunction(firstName string, lastName string) (string) {
fullname := firstName + " " + lastName
return fullname
}
func main() {
fmt.Println("Hello World")
fullName := myfunction("Michael", "Yang")
fmt.Println(fullName)
}
##返回多个值的函数 在Go程序中经常会看到从函数调用返回的两个结果。通常第一个值是正常情况下的期望结果,第二个返回值是任何潜在错误。我们重新实现一下函数:
package main
import (
"fmt"
)
func myfunction(firstName string, lastName string) (string, error) {
return firstName + " " + lastName, nil
}
func main() {
fmt.Println("Hello World")
// 我们可以将结果分配给多个变量
// 通过在逗号分隔的列表中定义其名称
// like so:
fullName, err := myfunction("Michael", "Yang")
if err != nil {
fmt.Println("处理错误情况")
}
fmt.Println(fullName)
}
##匿名函数 匿名函数与常规函数非常相似,只是它们在函数声明中缺少名称。这些函数可以在命名函数中定义,并且可以访问其封闭函数中的任何变量,如下所示:
package main
import (
"fmt"
)
func addOne() func() int {
var x int
// 我们声明并返回一个匿名函数
// 匿名函数返回一个整型值
return func() int {
// 这是匿名函数
// 可以访问父函数中声明的 x 变量
x++
return x + 1
}
}
func main() {
myFunc := addOne()
fmt.Println(myFunc()) // 2
fmt.Println(myFunc()) // 3
fmt.Println(myFunc()) // 4
fmt.Println(myFunc()) // 5
}
##可变参函数 有些时候,我们不知道我们的函数需要多少个参数。这是可变函数发挥作用的地方:
package main
import (
"fmt"
)
func myVariadicFunction(args ...string) {
fmt.Println(args)
}
func main() {
myVariadicFunction("hello", "world")
}
我们尝试运行它,程序打印包含Hello和world的字符串数组。
$ go run main.go
[hello world]
ps:可变参数函数不仅限于字符串,我们可以使用复合或基本类型
go的Println()就是个很好的栗子:
func Println(a ...interface{}) (n int, err error) {
return Fprintln(os.Stdout, a...)
}
此示例接受任意数量的interface {}参数
##小结 在本文中,我们学习了在go编程语言中的函数及匿名函数。希望你发现这很有用! 关于匿名函数不是很了解没关系,先记着,后面慢慢就回理解。
最后修改于 2019-07-29