Go基础(函数)
Tutorial: Go初级
Category: Go
Published: 2026-04-07 13:58:26
Views: 21
Likes: 0
Comments: 0
package main
import (
"errors"
"fmt"
)
func f1() {
fmt.Println("Hello World!")
}
func f2(x, y int) int {
return x + y
}
func f3(x string, y ...int) {
s := 0
for _, v := range y {
s += v
}
fmt.Println(x, y, s)
}
func f4(x, y int) (sum, sub int) {
sum = x + y
sub = x - y
fmt.Println(sum, sub)
return
}
type calc func(int, int) int
func f5(x, y int) int {
return x + y
}
func f6(x, y int) int {
return x - y
}
func f7(x, y int, op func(int, int) int) int {
return op(x, y)
}
func f8(s string) (func(int, int) int, error) {
switch s {
case "+":
return f5, nil
case "-":
return f6, nil
default:
err := errors.New("无法识别的操作符!")
return nil, err
}
}
func f9() {
add := func(x, y int) {
fmt.Println(x + y)
}
add(20, 20)
func(x, y int) {
fmt.Println(x + y)
}(20, 20)
}
func f10(base int) (func(int) int, func(int) int) {
add := func(i int) int {
base += i
return base
}
sub := func(i int) int {
base -= i
return base
}
return add, sub
}
func f13() {
fmt.Println("start")
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
fmt.Println("end")
}
func funcA() {
fmt.Println("func A")
}
func funcB() {
defer func() {
err := recover()
if err != nil {
fmt.Println("recover in B")
}
}()
fmt.Println(123)
panic("panic in B")
}
func funcC() {
fmt.Println("func C")
}
func main() {
f1()
f2(1, 2)
f3("hello", 1, 2, 3)
f4(3, 2)
var c calc
c = f5
fmt.Printf("Type of c: %T\n", c)
fmt.Println(c(1, 2))
c1 := f5
fmt.Printf("Type of c: %T\n", c1)
fmt.Println(c1(1, 2))
fmt.Println(f7(1, 2, f5))
c2, _ := f8("+")
fmt.Println(c2(20, 10))
f9()
f11, f12 := f10(10)
fmt.Println(f11(1), f12(2))
fmt.Println(f11(3), f12(4))
fmt.Println(f11(5), f12(6))
f13()
funcA()
funcB()
funcC()
}