美文网首页工作生活
golang中struct 中存放指针类型和值类型有什么区别?

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

作者: 清晨的麦田 | 来源:发表于2019-07-02 18:48 被阅读0次

    知识点golang中零值的概念

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

    划重点: \color{red}{slice、map、channel和指针类型的零值:nil}

    客官请看下面代码:

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

    \color{red}{此处说明指针地址为nil,在golang中nil的值调用方法会出panic恐慌,所以nil类型的要赋值}

    相关文章

      网友评论

        本文标题:golang中struct 中存放指针类型和值类型有什么区别?

        本文链接:https://www.haomeiwen.com/subject/rybthctx.html