Go学习笔记04-函数
程序员文章站
2022-07-05 16:03:04
[toc] 函数定义 函数定义与变量定义相似, 函数示例 小结 函数用关键字 func 定义。 定义函数时, 函数名在前,返回类型在后 。 一个函数可以有 多个返回值 。 返回值可以指定一个名字(仅用于非常简单的函数 )。 函数可以 作为参数 。 Go语言中函数 没有默认参数、可选参数,函数重载 ......
目录
函数定义
函数定义与变量定义相似,
func function_name(var1, var2, var3, ...) (return_type1, return_type1, ...) { //function body }
函数示例
package main import ( "fmt" "math" "reflect" "runtime" ) //函数可以有多个参数,多个返回值 func eval(a, b int, op string) (int, error) { switch op { case "+": return a + b, nil case "-": return a - b, nil case "*": return a * b, nil case "/": //函数div()有两个返回值,有一个返回值没用时可以用"_"代替 q, _ := div(a, b) return q, nil default: return 0, fmt.errorf( "unsupported operation: %s", op) } } //可以给返回值起名,但是只建议在很简单的函数中使用 func div(a, b int) (q, r int) { return a / b, a % b } //函数可以作为另一个函数的参数 func apply(op func(int, int) int, a, b int) int { //获取函数的指针 p := reflect.valueof(op).pointer() //获取函数名 opname := runtime.funcforpc(p).name() fmt.printf("calling function %s with args "+ "(%d, %d)\n", opname, a, b) return op(a, b) } //定义可变参数 func sum(numbers ...int) int { s := 0 //range获取可变参数范围 for i := range numbers { s += numbers[i] } return s } func swap(a, b int) (int, int) { return b, a } func main() { fmt.println("error handling") if result, err := eval(3, 4, "x"); err != nil { fmt.println("error:", err) } else { fmt.println(result) } q, r := div(13, 3) fmt.printf("13 div 3 is %d mod %d\n", q, r) //函数式编程,可以在表达式里直接定义一个匿名函数 fmt.println("pow(3, 4) is:", apply( func(a int, b int) int { return int(math.pow( float64(a), float64(b))) }, 3, 4)) fmt.println("1+2+...+5 =", sum(1, 2, 3, 4, 5)) a, b := 3, 4 a, b = swap(a, b) fmt.println("a, b after swap is:", a, b) }
小结
- 函数用关键字 func 定义。
- 定义函数时,函数名在前,返回类型在后。
- 一个函数可以有多个返回值。
- 返回值可以指定一个名字(仅用于非常简单的函数 )。
- 函数可以作为参数。
- go语言中函数没有默认参数、可选参数,函数重载
上一篇: 第八课 表格 html5学习3