Go 函数
1. 函数定义
func 函数名(参数1, 参数2 类型, 参数3 类型) (返回值1类型, 返回值2类型){
return 类型1, 类型2
}
func main() {
add(1, 2, 3.1)
}
func add(a, b int, c int) (int, error) {
return a + b * c, nil
}
- 返回值提前定义
func add(a, b int, c int) (sum int, err error) {
sum = a + b + c
err = nil
return sum, err
}
- 不定长参数
func add(desc string, num ...int) (sum int, err error) {
for _, v := range num {
sum += v
}
err = nil
return sum, err
}
- 函数参数
func main() {
cal(1, 2, add)
}
func add(num ...int) {
sum := 0
for _, v := range num {
sum += v
}
fmt.Println(sum)
}
func cal(a, b int, f func(num ...int)) {
f(a, b)
}
- defer应用场景
defer会在当前函数return前执行,常用来关闭连接,锁等,先定义的defer后执行
func main() {
defer fmt.Println("第一次定义")
defer fmt.Println("第二次定义")
fmt.Println("主函数输出")
}
主函数输出
第二次定义
第一次定义
- 异常处理error
func main() {
if _, err := er(); err != nil {
fmt.Println(err)
}
}
func er() (int, error) {
return 0, errors.New("定义了一个error")
}
- 异常处理panic
func main() {
fmt.Println("panic之前的函数")
panic("后面的统统不执行了")
fmt.Println("不会执行的函数")
}
- 异常处理recover
recover会接收panic报错,需要提前定义
func main() {
p()
}
func p() {
defer func() {
if r := recover(); r != nil {
fmt.Println("recover接收到了一个panic", r)
}
}()
// map初始化不给空间会报错
var names map[string]string
names["go"] = "go"
return
}
初学linux,每学到一点东西就写一点,如有不对的地方,恳请包涵!