栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

golang:各种类型的变量直接存储的是什么

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang:各种类型的变量直接存储的是什么

1. integer、float、bool、string类
func main() {
    var (
        a = 1
        b = "hello"
        c = false
        d = 1.22
    )
	fmt.Printf("a以值打印t%vn", a)
    fmt.Printf("a以指针打印t%pn", a)
    
    fmt.Printf("b以值打印t%vn", b)
    fmt.Printf("b以指针打印t%pn", b)
    
    fmt.Printf("c以值打印t%vn", c)
    fmt.Printf("c以指针打印t%pn", c)
    
    fmt.Printf("d以值打印t%vn", d)
    fmt.Printf("d以指针打印t%pn", d)
}

// 输出
a以值打印	1
a以指针打印	%!p(int=1)

b以值打印	hello
b以指针打印	%!p(string=hello)

c以值打印	false
c以指针打印	%!p(bool=false)

d以值打印	1.22
d以指针打印	%!p(float64=1.22)

可见,这些量存储的都是值,不是指针

2. 数组、结构体

结构体

type Test struct{
    a int
}

func main() {
    var (
        a Test
        b = Test{}
        c = Test{a:1}
    )
	fmt.Printf("a以值打印t%vn", a)
    fmt.Printf("a以指针打印t%pn", a)
    
    fmt.Printf("b以值打印t%vn", b)
    fmt.Printf("b以指针打印t%pn", b)
    
    fmt.Printf("c以值打印t%vn", c)
    fmt.Printf("c以指针打印t%pn", c)
}
// 输出
a以值打印	{0}
a以指针打印	%!p(main.Test={0})

b以值打印	{0}
b以指针打印	%!p(main.Test={0})

c以值打印	{1}
c以指针打印	%!p(main.Test={1})

数组

func main() {
    var (
        d [2]int
        e = [2]int{}
        f = [2]int{1,2}
    )
    fmt.Printf("d以值打印t%vn", d)
    fmt.Printf("d以指针打印t%pn", d)
    
    fmt.Printf("e以值打印t%vn", e)
    fmt.Printf("e以指针打印t%pn", e)
    
    fmt.Printf("f以值打印t%vn", f)
    fmt.Printf("f以指针打印t%pn", f)
}

// 输出
d以值打印	[0 0]
d以指针打印	%!p([2]int=[0 0])

e以值打印	[0 0]
e以指针打印	%!p([2]int=[0 0])

f以值打印	[1 2]
f以指针打印	%!p([2]int=[1 2])

可见,数组和结构体存储的都是值,是类型实体对象

3. Map、Slice、Channel、指针
func main() {
    var (
        a []int
        b map[int]int
        c chan int
        d = []int{1,2}
        e = map[int]int{0:1,1:2}
        f = make(chan int,1)
    )
	fmt.Printf("a以值打印t%vn", a)
    fmt.Printf("a以指针打印t%pn", a)
    
    fmt.Printf("b以值打印t%vn", b)
    fmt.Printf("b以指针打印t%pn", b)
    
    fmt.Printf("c以值打印t%vn", c)
    fmt.Printf("c以指针打印t%pn", c)
    
    fmt.Printf("d以值打印t%vn", d)
    fmt.Printf("d以指针打印t%pn", d)
    
    fmt.Printf("e以值打印t%vn", e)
    fmt.Printf("e以指针打印t%pn", e)
    
    fmt.Printf("f以值打印t%vn", f)
    fmt.Printf("f以指针打印t%pn", f)
}
// 输出
a以值打印	[]
a以指针打印	0x0   // nil

b以值打印	map[]
b以指针打印	0x0   // nil

c以值打印	
c以指针打印	0x0   // nil

d以值打印	[1 2]
d以指针打印	0xc00001a040

e以值打印	map[0:1 1:2]
e以指针打印	0xc000052150

f以值打印	0xc000046070
f以指针打印	0xc000046070

可见,map、channel、slice存的都是指针,未初始化时它们都是nil

4. 总结

值类型变量存储的都是值,引用类型变量存储的都是指针

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/903978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号