这几天博主学习了一下go,发现比Java简单很多,go的代码更少更为简洁,并且并发问题从内部调用锁即可,
func runtaks(id int) string {
time.Sleep(10 * time.Microsecond)
return fmt.Sprintf("then result is from %d ", id)
}
func FristResponse() string {
numOfRunner := 10
ch := make(chan string, numOfRunner) 漏问题
for i := 0; i < numOfRunner; i++ {
go func(i int) {
ret := runtaks(i)
ch <- ret
}(i)
}
return <-ch
}
此处go代码各位觉得用Java怎样去解决呢,
func Dosomething(p interface{}, wg *sync.WaitGroup) {
wg.Add(2) //加锁
shouldReturn := newFunction(p, wg)
newFunction1(p, wg)
if shouldReturn {
return
}
wg.Wait() //释放锁
}
func newFunction1(p interface{}, wg *sync.WaitGroup) {
switch v := p.(type) {
case int:
fmt.Println("int1", v)
case string:
fmt.Println("string1", v)
case bool:
fmt.Println("bool1", v)
default:
fmt.Println("erro1")
}
}
func newFunction(p interface{}, wg *sync.WaitGroup) bool {
if i, ok := p.(int); ok {
fmt.Println("int", i)
return true
} else if s, ok := p.(string); ok {
fmt.Println("string", s)
return true
} else {
fmt.Println("erro")
}
return false
}
func TestEnum(t *testing.T) {
var wg sync.WaitGroup
Dosomething(10, &wg)
Dosomething("dhahd", &wg)
}
此处也是一样,各位觉得用Java需要写多少行代码搞定