不支持重载
函数签名:
func flushICache(begin, end uintptr) // implemented externally
type binOp func(int, int) int
不支持泛型
变参
func Greeting(prefix string, who ...string)
Greeting("hello:", "Joe", "Anna", "Eileen")
slice := []int{7,9,3,5,1}
x = min(slice...)
在实现中,将变参看作 slice
多类型支持
func typecheck(..,..,values … interface{}) {
for _, value := range values {
switch v := value.(type) {
case int: …
case float: …
case string: …
case bool: …
default: …
}
}
}
defer
用于推迟在返回之前执行。defer 的注册类似栈。后进先出。
defer 的函数中可以获取到返回值
内置函数
名称 | 说明 |
---|---|
close | 用于管道通信 |
len、cap | len 用于返回某个类型的长度或数量(字符串、数组、切片、map 和管道);cap 是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map) |
new、make | new 和 make 均是用于分配内存:new 用于值类型和用户定义的类型,如自定义结构,make 用于内置引用类型(切片、map 和管道)。它们的用法就像是函数,但是将类型作为参数:new (type)、make (type)。new (T) 分配类型 T 的零值并返回其地址,也就是指向类型 T 的指针(详见第 10.1 节)。它也可以被用于基本类型:v := new (int) 。make (T) 返回类型 T 的初始化之后的值,因此它比 new 进行更多的工作(详见第 7.2.3/4 节、第 8.1.1 节和第 14.2.1 节)new () 是一个函数,不要忘记它的括号 |
copy、append | 用于复制和连接切片 |
panic、recover | 两者均用于错误处理机制 |
print、println | 底层打印函数(详见第 4.2 节),在部署环境中建议使用 fmt 包 |
complex、real imag | 用于创建和操作复数(详见第 4.5.2.2 节) |
回调
package main
import (
"fmt"
)
func main() {
foo(1, CallbackAdd)
}
func CallbackAdd(a, b int) {
fmt.Printf("The sum of %d and %d is: %d\n", a, b, a+b)
}
func foo(y int, callback func(int, int)) {
callback(y, 2) // this becomes CallbackAdd(1, 2)
}
闭包
自调用的匿名函数:
func() {
// ...
}()
where := func() {
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%d", file, line)
}
where()
// some code
where()
// some more code
where()