golang中struct 中存放指针类型和值类型有什么区别?

栏目: C · 发布时间: 5年前

内容简介:知识点golang中零值的概念划重点:客官请看下面代码:

知识点golang中零值的概念

整型的零值:0
浮点的零值:0
string的零值:""(字符串空)
byte, rune 的零值:0
数组[len]type的零值为: 长度为 len 每个元素的零值为 type 对应的零值。
      例如: var c[4]int 的零值为 [0 0 0 0]

slice、map、channel和指针类型的零值:nil

划重点: golang中struct 中存放指针类型和值类型有什么区别?

客官请看下面代码:

package main

import "fmt"

type Ball struct {
    val int
}

type Person1 struct {
    person1 *Ball
}
type Person2 struct {
    person2 Ball
}

type Bar interface {
    setVal(newVal int)
    getVal() int
}

func (b Ball) getVal() int {
    return b.val
}
func (b *Ball) setVal(newVal int) {
    b.val = newVal
}

func main() {
    var person1 Person1

    //person1 := &Person1{&Ball{val: 10}}
    fmt.Println(person1.person1.getVal())
    person1.person1.setVal(1000)
    fmt.Println(person1.person1.getVal())

    //var person2 Person2
    person2 := &Person2{Ball{val: 20}}
    fmt.Println(person2.person2.getVal())
    person2.person2.setVal(2000)
    fmt.Println(person2.person2.getVal())
}

看下效果

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1091506]

goroutine 1 [running]:
main.main()

golang中struct 中存放指针类型和值类型有什么区别?


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数码人类学

数码人类学

[英]丹尼尔·米勒、希瑟·A.霍斯特 / 王心远 / 人民出版社 / 2014-10 / 48.00元

人类学有两大任务,一是理解什么是人,二是理解人性是如何透过多元的文化表现出来。数码科技的蓬勃发展给这两者都带来了新的作用力。《数码人类学》向读者展示了人类与数码科技如何辩证地相互定义。最终我们试图得出一个结论,那便是“数码科技对人类到底意味着什么?” 从社交网站到数字化博物馆;从数字时代政治学到电子商务,浸润式的数码科技,给普通人的生活带来了根本性的改变。仅仅用数据来说明与理解问题显然过于太......一起来看看 《数码人类学》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具