函数声明
这里的函数声明方式与c略有不同:
func 函数名(参数列表) (返回值列表){
函数体
}
例如编写一个add函数:
func add(x int,y int) int{
return x+y
}
fmt.Printf("%d",add(x,y)) //输出为 7
在参数列表中,如果数据类型相同,同样可以多个变量初始化:
func add(x,y int) int{
return x+y
}
在go语言中的函数是可以多值返回的
例如计算两个数的和和差:
func algo(x int,y int) (int,int){
return x+y,x-y
}
func main() {
x := 3
y := 4
plus , sub := algo(x,y)
fmt.Printf("%d %d",plus,sub)
}
在这个函数中,返回了 x,y 的和和差并将其输出,这样就十分方便。
函数的参数数量可变的时候:
func sum(vals ...int) int {
total := 0
for _, val := range vals {
total += val
}
return total
}
fmt.Println(sum()) // "0"
fmt.Println(sum(3)) // "3"
fmt.Println(sum(1, 2, 3, 4)) // "10"
这个函数传入的参数是可以变长的,并将传入的所有参数的和输出。
错误处理
一般函数都会有一个 error 的反回值,用来表示错误:
package main
import (
"errors"
"fmt"
)
type user struct{
name string
password string
}
func findUser(user []user , name string) (v *user , err error){
for _ , u := range user{
if u.name == name{
return &u , nil
}
}
return nil , errors.New("Not found")
}
func main() {
u , err := findUser([]user{{"li","1024"}},"wang")
if err != nil {
fmt.Println(err)
}else {
fmt.Println(*u)
}
if u , err := findUser([]user{{"wang","1024"}},"wang") ; err !=nil{
fmt.Println(err)
} else {
fmt.Println(*u)
}
}
//输出为:
//Not found
//{wang 1024}
在上面创建了一个函数用来寻找 user 结构体的人,如果找不到会返回 Not found 错误。