请教 go 一个继承中有 mutex 问题。

2020-05-15 23:26:55 +08:00
 chor02
package main

import (
"fmt"
"sync"
)

type A struct {
name string
mu sync.Mutex
}
func (a *A) Say(){
a.mu.Lock()
defer a.mu.Unlock()
fmt.Printf("A: %v\n",a.name)
}

type B struct{
A
}
func (b *B) Say(){
fmt.Printf("B: %v\n",b.name)
}


func main() {
a := A{name:"joe"}
a.Say()
b := B{a}
b.Say()
}



b := B{a} 报错,请文有没有其他方式可以解决
4305 次点击
所在节点    Go 编程语言
7 条回复
chor02
2020-05-15 23:43:19 +08:00
解决了,改用指针就可以
janxin
2020-05-15 23:48:22 +08:00
没有报错吧...有个提示修改?
damingxing
2020-05-15 23:51:12 +08:00
没发现有问题呀
chor02
2020-05-16 02:51:49 +08:00
@janxin @damingxing https://play.golang.org/p/Z9V9du-qu8f 报了个 literal copies lock value from a: play.A contains sync.Mutex
hercule
2020-05-16 10:38:48 +08:00
互斥锁,复制是有问题 de
damingxing
2020-05-16 13:29:31 +08:00
@chor02 受教了,以后全部用*sync.Mutex
Pegasus
2020-12-21 20:03:31 +08:00
@damingxing 理解错了吧,这里应该是用 A 的指针作为成员。不是说 要用 *sync.Mutex 。
type B struct {
*A
}
然后初始化用传进去指针。话说 V2EX 连个格式化代码功能都没有么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672213

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX