Go语言基本数据类型的默认值与nil比较

发表时间: 2024-05-09 15:44

基本数据类型的默认值

bool //默认值为false

string //默认值为空字符串

int int8 int16 int32 int64 //默认值为0

uint uint8 uint16 uint32 uint64 uintptr //默认值为0

byte //默认值为0 uint8 的别名

rune //默认值为0 int32 的别名

float32 float64 //默认值为0

complex64 complex128 / /默认值为0

nil 可用于赋值的数据类型

在go语言中, 布尔类型的零值(初始值)为 false, 数值类型的零值为 0, 字符串类型的零值为空字符串""。

除此之外其它类型的默认值为nil, nil可以代表下面这些类型的零值:

指针(包括unsafe中的)

map

slice

function

channel

interface

error

以上数据类型默认值为nil, 可以直接传递 nil;

实例:

// 切片可以直接传 nilpackage mainimport ("fmt")func main() {    var data []string    data = nil    // 下面返回的结果是一样的    fmt.Println(data) // []    fmt.Println([]string{}) // []}

实例:

package mainimport ("fmt""reflect")func main() {    fmt.Println(new(int), reflect.TypeOf(new(int)), *new(int)) // 0xc0000120d0 *int 0}

实例:

package mainimport ("errors""fmt")func f1(code int) (int, error) {    if code == 1 {    		return -1, errors.New("msg test error")    }    return code, nil}func main() {    // 使用 errors 定制错误信息    var e error // 数据类型 error    e = errors.New("This is a test error")    fmt.Println(e.Error()) // 输出:This is a test error    // 使用 fmt.Errorf() 定制错误信息    err := fmt.Errorf("This is another error")    fmt.Println(err) // 输出:This is another test error    // 知识点1: error 可以传 nil    err = nil // error 数据类型可以传递 nil    fmt.Println(err) // <nil>    res, err := f1(404)    fmt.Println(res, err) // 404 <nil>    // 知识点2: map 可以传 nil    var m1 map[int]string //只是申明一个map, 没有初始化,此为空(nil)map    m1 = nil // map 数据类型 可以传空    fmt.Println(m1)}