Golang 中国

samete

Golang China 第 899 号会员,加入于 2013-11-23 14:15


samete最近创建的主题


3 执行这段代码结果分析
问与答samete • 2018-06-15 11:16 • 最后回复来自 samete
2 go模板不能条件加载吗?
问与答samete • 2018-06-10 00:07 • 最后回复来自 wangwang
2 赋值报错问题
问与答samete • 2018-04-02 20:58 • 最后回复来自 samete
1 函数不执行
Web开发samete • 2018-04-04 13:54 • 最后回复来自 fanyang
4 golang简单输出HELLO, WORLD!问题出在哪?
问与答samete • 2017-05-29 22:08 • 最后回复来自 samete
7 go死锁的问题
问与答samete • 2016-12-27 16:34 • 最后回复来自 samete
samete 创建的更多主题

samete最近回复了


回复了 samete 创建的主题: 执行这段代码结果分析 2018-06-15 11:16

为什么cpu核数改变不了?

回复了 samete 创建的主题: 赋值报错问题 2018-04-02 20:58

thanks!

回复了 samete 创建的主题: golang简单输出HELLO, WORLD!问题出在哪? 2017-05-29 22:08
package main

import (
    "fmt"
    "runtime"
    "strings"
    "sync"
)

const words = "hello, world!"

var wg sync.WaitGroup
var finalWords string

// var mutex sync.Mutex

func main() {
    runtime.GOMAXPROCS(runtime.NumCPU())
    c := make(chan string)
    cc := make(chan string)

    for i := 0; i < len(words); i++ {
        wg.Add(2)
        go toUppercase(c, cc)
        go addWords(cc)
        c <- string(words[i])
        wg.Wait()
    }

    fmt.Println(words, finalWords)
}

func toUppercase(word chan string, cc chan string) {
    w, ok := <-word
    if !ok {
        close(word)
        return
    }
    var upperWord = strings.ToUpper(w)
    cc <- upperWord
    wg.Done()
}

func addWords(word chan string) {
    w, ok := <-word
    if !ok {
        close(word)
        return
    }
    // mutex.Lock()
    finalWords += w
    // mutex.Unlock()
    wg.Done()

}

我改成这样了,可以正确的输出,但是我没加锁

回复了 samete 创建的主题: golang简单输出HELLO, WORLD!问题出在哪? 2017-05-29 21:58

哦,谢谢!我试试看

回复了 samete 创建的主题: golang简单输出HELLO, WORLD!问题出在哪? 2017-05-29 18:15

我的这段代码错在哪?为什么不能正确的输出HELLO, WORLD!啊?

回复了 samete 创建的主题: go死锁的问题 2016-12-27 16:34

嗯,知道了,谢谢!

回复了 samete 创建的主题: go死锁的问题 2016-12-27 11:33

thanks,我知道为什么了,谢谢啊!

回复了 samete 创建的主题: go死锁的问题 2016-12-26 11:08

我把代码改成这样:

package main

import (
    "fmt"
)

func main() {

    ch1 := make(chan int, 10)

    // fmt.Println(len(ch1), cap(ch1))
    for i := 0; i < cap(ch1); i++ {
        ch1 <- i
    }
    // fmt.Println(len(ch1), cap(ch1))

    for j := 0; j < len(ch1); j++ {
        c := <-ch1
        fmt.Println(c)
    }

}

为什么打印的结果是0 1 2 3 4 ?

回复了 samete 创建的主题: go死锁的问题 2016-12-25 21:11

case e, ok = <-ch1: 当len(ch1)=0时,会把当前的协程切出去,这个只有main,没有可运行的协程,所以会死锁。
你是指这个协程就是主协程?

回复了 devuser 创建的主题: 关于开发工具/千万不要被工具给困住了 2015-03-02 13:55

路过

samete 创建的更多回复