内置函数

基本介绍 

Golang设计者为了编程方便,提供了一些函数,这些函数可以直接使用,被称为Go的内置函数

1, len 用来求长度,如:string array ,slice,map, channel

2,new 用来分配内存,主要用来分配值类型,如:int, float32,struct....返回的是指针

代码示例

package main

import "fmt"

func main() {
num1 := 100
fmt.Printf("num1的类型%T, num1的值=%v, num1的地址%v\n", num1, num1, num1)

num2 := new(int)
*num2 = 150
fmt.Printf("num2的类型%T, num2的值=%v, num2的地址%v\n num2这个指针,指向的值=%v",num2, num2, num2, *num2)
}

Golang的内置函数和错误处理介绍_错误处理

3,make 用来分配内存,主要用来分配引用类型,如channel,map,slice


错误处理

基本介绍 

1,Go语言追求简洁优雅,所以,go语言不支持传统的try ... catch...finally 这种处理

2,Go中引入的处理方式为: defer ,panic, recover

3,这几个异常的使用场景可以简单描述,Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理

捕获异常不处理代码示例 

package main

import (
"fmt"
)

func test(){
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=",res)
}

func main() {
test()
fmt.Printf("main()下面的代码.....")
}

Golang的内置函数和错误处理介绍_go语言_02

对上面代码注解:

1,在默认情况下,当发生错误后(panic)程序就会退出(崩溃)

2,希望发生错误后,可以捕获到错误,并进行处理,保证程序可以继续执行,还可以在捕获到错误后,给管理员一个提示

3,就需要引入错误机制

使用defer +recover来处理错误

package main

import (

"fmt"
"time"
)

func test() {
defer func() {
err := recover()
if err !=nil {
fmt.Println("err=", err)
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=", res)
}

func main() {
test()
for {
fmt.Printf("main()下面的代码......")
time.Sleep(time.Second)
}

}

Golang的内置函数和错误处理介绍_内置函数_03

错误处理的好处

进行错误处理后,程序不会轻易崩溃,如果加入预警代码,可以让程序更加健壮,

package main

import (
"errors"
"fmt"
)

func test() {
defer func() {
err := recover()
if err !=nil {
fmt.Println("err=", err)
fmt.Printf("发送邮件给管理员admin@test.com")
}
}()
num1 := 10
num2 := 0
res := num1 / num2
fmt.Println("res=", res)
}

func readConf(name string) (err error) {
if name == "config.ini" {
return nil
}else {
return errors.New("读取文件错误...")
}
}

func test02() {
err := readConf("config.ini")
if err != nil {
panic(err)
}
fmt.Println("test02()继续执行....")
}
func main() {

test02()
fmt.Printf("main()下面的代码......")
}

Golang的内置函数和错误处理介绍_代码示例_04