码迷,mamicode.com
首页 > 其他好文 > 详细

go中的nocopy

时间:2020-06-29 22:58:40      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:com   awesome   https   fun   copy   pac   unlock   from   pie   

go中的copy,一般习惯来讲都是值拷贝,但是这种拷贝存在的问题是锁对象的“失效”

 

如何对一个对象进行nocopy处理,下面是一种方式

package main

import (
    "fmt"
)

type noCopy struct{}

// Lock is a no-op used by -copylocks checker from `go vet`.
func (*noCopy) Lock()   {}
func (*noCopy) Unlock() {}

type S struct {
    noCopy
    data int
}

func main() {
    
    var s S
    ss := s
    fmt.Println(ss)
}

但是如果直接build run没问题,我们go vet就会分析出问题

>go vet
# awesomeProject2/nocopy
.\main.go:19:8: assignment copies lock value to ss: awesomeProject2/nocopy.S
.\main.go:20:14: call of fmt.Println copies lock value: awesomeProject2/nocopy.S

 

end

https://github.com/golang/go/issues/8005

看这个issue里,rob pike似乎对此表示知道但是坚决不改orz

go中的nocopy

标签:com   awesome   https   fun   copy   pac   unlock   from   pie   

原文地址:https://www.cnblogs.com/CherryTab/p/13210704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!