前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go编程基础-基础篇 17

Go编程基础-基础篇 17

原创
作者头像
未来最可爱的人
修改2021-03-25 09:48:03
2650
修改2021-03-25 09:48:03
举报
文章被收录于专栏:编程基础编程基础编程基础

Go 语言中的 nil

nil 是特殊的零值

任何一个变量在声明之后会自动被赋予一个零值。数值类型的变量零值为0,字符串为"",而指针、切片、map、通道、函数和接口的零值就是nil。

package main

import "fmt"

func main() {

var m map[int]string

var p \*int

var c chan int

var s []int

var f func()

var i interface{}

fmt.Printf("map:%#v\n", m)

fmt.Printf("指针:%#v\n", p)

fmt.Printf("通道:%#v\n", c)

fmt.Printf("切片:%#v\n", s)

fmt.Printf("函数:%#v\n", f)

fmt.Printf("接口:%#v\n", i)

}
map:map[int]string(nil)

指针:(\*int)(nil)

通道:(chan int)(nil)

切片:[]int(nil)

函数:(func())(nil)

接口:<nil>

nil 标识符无法比较

Go 语言中 nil 和 nil 之间是无法比较的。

package main

import "fmt"

func main() {

fmt.Println(nil == nil)

}
# command-line-arguments

./2.go:6:18: invalid operation: nil == nil (operator == not defined on nil)

不同类型的 nil 的长度不同

不同类型的变量的内存分配都是不同的,即使是 nil ,分配的内存也是不同的。

package main

import (

"fmt"

"unsafe"

)

func main() {

var m map[int]string

var p \*int

var c chan int

var s []int

var f func()

var i interface{}

fmt.Println("map:", unsafe.Sizeof(m))

fmt.Println("指针:", unsafe.Sizeof(p))

fmt.Println("通道:", unsafe.Sizeof(c))

fmt.Println("切片:", unsafe.Sizeof(s))

fmt.Println("函数:", unsafe.Sizeof(f))

fmt.Println("接口:", unsafe.Sizeof(i))

}
map: 8

指针: 8

通道: 8

切片: 24

函数: 8

接口: 16

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • Go 语言中的 nil
    • nil 是特殊的零值
      • nil 标识符无法比较
        • 不同类型的 nil 的长度不同
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档