背景
跟着老男孩第五期学go,老师的设计是使用结构体,我捣鼓能不能不用结构体。结果很多问题。做个记录。
其实主要想不明白,channel是引用类型,为什么还会有指针的channel类型。
var a = make(chan *int)
var b = make(chan * bool)
代码
package main
import (
"fmt"
"math/rand"
"sync"
"time"
)
var wg sync.WaitGroup
var t1 = make(chan int, 200)
var t2 = make(chan int, 200)
func sc(a chan<- int) {
defer wg.Done()
for i := 0; i < 10; i++ {
a <- rand.Int()
// fmt.Println("js inside:", a)
time.Sleep(time.Millisecond * 1000)
}
}
func js(ch1 <-chan int, ch2 chan<- int) {
defer wg.Done()
n := <-ch1
sum := 0
for n > 0 {
sum += n % 10
n = n / 10
}
ch2 <- sum
}
func main() {
wg.Add(2)
go sc(t1)
// wg.Add(24)
// for i := 0; i < 24; i++ {
// go js(t1, t2)
// }
go js(t1, t2)
wg.Wait()
for a := range t2 {
fmt.Println("outside:", a)
// for b := range t1 {
// fmt.Println("outside:", b, a)
// }
}
}
本文记录了作者在跟随老男孩第五期课程学习Go语言过程中,尝试不使用结构体进行编程所遇到的问题,特别是对于Channel作为引用类型及其指针变种的理解。通过具体的代码示例,探讨了如何使用Channel在Go程序中实现数据的并发处理。
5万+

被折叠的 条评论
为什么被折叠?



