基本数据类型的默认值
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;
实例:
// 切片可以直接传 nil
package main
import (
"fmt"
)
func main() {
var data []string
data = nil
// 下面返回的结果是一样的
fmt.Println(data) // []
fmt.Println([]string{}) // []
}
实例:
package main
import (
"fmt"
"reflect"
)
func main() {
fmt.Println(new(int), reflect.TypeOf(new(int)), *new(int)) // 0xc0000120d0 *int 0
}
实例:
package main
import (
"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)
}