不支持重载

函数签名:

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()