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)}