一起来学 Go (4)常用函数

2023年 1月 4日 50.9k 0

1. main 和 init 函数

一个 package 里面可以写多个 init 函数,但必须仅包含一个 main 函数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
	"fmt"
)

func init() {
	fmt.Println("init 1")
}

func init() {
	fmt.Println("init 2")
}

func main() {
	fmt.Println("main")
}
// init 1
// init 2
// main

2. defer 函数

Go 不会立即执行 defer 修饰的代码,而是进行标记,在程序退出之前执行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import (
	"fmt"
)

func main() {
	defer func() {
		fmt.Println("before exit, in defer")
	}()
	fmt.Println("I am in main")
}
// I am in main
// before exit, in defer

3. panic 和 recover 函数

Go 中的异常处理:抛出一个 panic ,然后在 defer 中使用 recover 捕获异常,并将 panic 抛向上一层。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package main

import (
	"fmt"
)

func main() {
	defer fmt.Println("I am in main")
	defer func() {
		if err := recover(); err != nil {
			fmt.Println(err)
			// do something
		}
	}()

	panic("error message")
}
// error message
// I am in main

4. new 和 make 函数

  • new 函数

原型:

1
func new(Type) *Type

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
package main

import (
	"fmt"
)

func main() {

	tmp := new(int)
	fmt.Printf("tmp --> %#v \n", tmp)
	fmt.Printf("tmp point to --> %#v \n ", *tmp)
}
// tmp --> (*int)(0x40e020) 
// tmp point to --> 0 

new 用来分配内存,参数是类型,返回值是一个指向分配零值的指针。

  • make 函数

原型:

1
func make(Type, size IntegerType) Type 

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
package main

import (
	"fmt"
)

func main() {

	var s1 []int
	fmt.Printf("s1 is --> %#v \n", s1)
	s2 := make([]int, 3)
	fmt.Printf("s2 is --> %#v \n", s2)
}
// s1 is --> []int(nil) 
// s2 is --> []int{0, 0, 0} 

make 用来为 slice,map 或 chan 类型分配内存、并初始化一个对象,参数是类型。但 make 返回类型的引用而不是指针。区别:new 仅将内存置零,而 make 会对 slice、map、chan 引用的数据进行初始化。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论