golang结构体杂记

Posted by Jason on Thursday, January 3, 2019

TOC

go结构体

对象值传递

type Test struct{
    data map[string]string
    intData int
    rwLock sync.RWMutex
}

func main() {
    test1 := Test{
	data: map[string]string{},
    }
 
    test2 := test1
    test1.data["test"] = "test"
    test1.intData = 2

    fmt.Println(test1)
    fmt.Println(test2)
}
----
结果
{map[test:test] 2}}
{map[test:test] 0}}

concurrent map read and map write

值传递对共享结构体中对象的指针,所以如果对test1对象值传递,则对象中的锁并不能对其中的指针对象进行加锁,这就会造成读写冲突。

结构体函数

func (t Test) func1() {
    t.intData = 1
    fmt.Println("func1")
}

func (t *Test) func2() {
    t.intData = 2
    fmt.Println("func2")
}

func main() {
    test1 = Test{}
    test1.func1()
    fmt.Println(test1)
    test1.func2()
    fmt.Println(test1)
}
---
func1
{map[test:test] 0}
func2
{map[test:test] 2}

值函数和引用函数区别:

  • 引用函数会对对象做变更;值函数不会变更对象中非引用属性的值

「真诚赞赏,手留余香」

Jason Blog

真诚赞赏,手留余香

使用微信扫描二维码完成支付


comments powered by Disqus