当一个接口只被一个单一的具体类型实现时有一个例外,就是由于它的依赖,这个具体类型
不能和这个接口存在在一个相同的包中。这种情况下,一个接口是解耦这两个包的一个好方
式。
这句话啥意思啊,,go
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
关注- 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7561050
- 这篇博客也不错, 你可以看下GO语言实现接口,需要实现所有接口方法吗?
- 除此之外, 这篇博客: Go线程模型&异步编程的能力中的 计算节点2:将通道数据读取,异步返回保存读取数据的平方数通道 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
func sq(in <-chan int) <-chan int { out := make(chan int) go func() { //异步的从in获取数据,开始是阻塞的,遍历写入out,当gen调用close(out)后就会不在阻塞等待in的数据 for n := range in { out <- n * n } // 通知main goroutine的for 通道数据写入完,读取完就可以了,不用阻塞了 close(out) }() return out }测试:
package main import ( "fmt" ) // gen函数,nums表示多个int类型数据,多参数 返回一个只读取的通道, 不会阻塞 func gen(nums ...int) <-chan int { out := make(chan int) go func() { // 写入所有数据,然后关闭通道,写入一个之后等待消费者消费后,才可以再次写入 for _, n := range nums { out <- n } // close 后不能写入,其他goroutine读取out的数据完之后就会退出不在阻塞 close(out) }() return out } func sq(in <-chan int) <-chan int { out := make(chan int) go func() { //异步的从in获取数据,开始是阻塞的,遍历写入out,当gen调用close(out)后就会不在阻塞等待in的数据 for n := range in { out <- n * n } // 通知main goroutine的for 通道数据写入完,读取完就可以了,不用阻塞了 close(out) }() return out } func main() { c := gen(2, 3) out := sq(c) // 类似于JAVA CompleteFuture.thenApply ..等 for i := range out{ fmt.Println(i) } }
同样的sq函数输入,输出类似,可以多次调用该节点
func main() { c := gen(2, 3) out := sq(c) out = sq(out) // 类似于JAVA CompleteFuture.thenApply ..等 for i := range out{ fmt.Println(i) } }- 您还可以看一下 CSDN讲师老师的架构师成长计划课程中的 软硬一体实现数据库性能优化小节, 巩固相关知识点
解决评论 打赏 举报无用 1