函数

93 阅读1分钟

函数声明

这里的函数声明方式与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 错误。