0
点赞
收藏
分享

微信扫一扫

20220712GO语言-函数

特点

无需声明原型
支持不定变参
支持多返回值
支持命名返回参数
支持匿名函数和闭包 函数也是一种类型,一个函数可以赋值给变量
不支持 嵌套 (nested) 一个包不能有两个名字一样的函数
不支持 重载 (overload)

不支持 默认参数 (default parameter)。

函数定义

func function_name( [parameter list] ) [return_types] {
函数体
}
// 不定参数
func myfunc(args ...int) { //0个或多个参数
}
func add(a int, args…int) int { //1个或多个参数
}

匿名函数

n := func(a int) int {
a++
return a
}
fmt.Println(n(1))

碰巧匿名函数与上了切片

fns := [](func(x int) int){
func(x int) int { return x + 1 },
func(x int) int { return x + 2 },
}
println(fns[0](100))

闭包

func main() {
test()()
}

func test() func() {
return func() {
fmt.Println("test func ()")
}
}

// 需要注意如下代码
func a() func() {
i := 0
b := func() {
i++
fmt.Println(i)
}
return b
}
func main() {
c := a()
c()
c()
}

defer 和panic

defer特性

1.关键字 defer 用于注册延迟调用。
2. 这些调用直到 return 前才被执。因此,可以用来做资源清理。
3. 多个defer语句,按先进后出的方式执行。
4. defer语句中的变量,在defer声明时就决定了。
defer用途

1.关闭文件句柄
2. 锁资源释放
3. 数据库连接释放

panic用途

1、内置函数
2、假如函数F中书写了panic语句,会终止其后要执行的代码,在panic所在函数F内如果存在要执行的defer函数列表,按照defer的逆序执行
3、返回函数F的调用者G,在G中,调用函数F语句之后的代码不会执行,假如函数G中存在要执行的defer函数列表,按照defer的逆序执行
4、直到goroutine整个退出,并报告错误

结构体

type 类型名 struct {
字段名 字段类型
字段名 字段类型

}

结构体嵌套

//address 地址结构体
type address struct {
city string
}

//User 用户结构体
type user struct {
name string
sex string
addr address //匿名结构体
}

结构体继承

type User struct {
Name string
Sex string
}

type Teacher struct {
user User
}
type Manger struct {
User
}

结构体方法

类型 T 方法集包含全部 receiver T 方法。
类型 *T 方法集包含全部 receiver T + *T 方法。
如类型 S 包含匿名字段 T,则 S *S 方法集包含 T 方法。
如类型 S 包含匿名字段 *T,则 S *S 方法集包含 T + *T 方法。
不管嵌入 T T,S 方法集总是包含 T + *T 方法。





















举报

相关推荐

0 条评论