切片界面......如何才能使这个并发使用安全?

时间:2017-07-15 18:09:24

标签: go concurrency

我有以下代码https://play.golang.org/p/4mlXMhqpLJ

package main

import (
    "fmt"
)

type A struct {
    Name string
}

func (a *A) method(name string) {
    a.Name = name
}

func (a *A) name() string {
    return a.Name
}

type intt interface {
    method(string)
    name() string
}

var interfacer = []intt{
    &A{},
}

func ExportedMethod(name string) bool {
    for _, aa := range interfacer {
        fmt.Println("Pre:", aa.name())
        aa.method(name)
        fmt.Println("Post:", aa.name())
        if aa.name() == "Fred" {
            return true
        }
    }
    return false
}

func main() {
    ExportedMethod("Bob")
    ExportedMethod("Frank")
}

由于我的第二个for循环打印Bob,很明显这对于并发使用是不安全的。这是一个简单的例子。实际上,我有更多的结构将满足接口...& B {},& C {},& D {},& E {}等......我需要一种方法来能够循环遍历所有结构,这就是为什么我有一片界面。如何使这个并发使用安全?

0 个答案:

没有答案