当一个接口只被一个单一的具体类型实现时有一个例外,就是由于它的依赖,这个具体类型
不能和这个接口存在在一个相同的包中。这种情况下,一个接口是解耦这两个包的一个好方
式。
这句话啥意思啊,,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
悬赏问题
- ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
- ¥15 android 集成sentry上报时报错。
- ¥50 win10链接MySQL
- ¥35 跳过我的世界插件ip验证
- ¥15 抖音看过的视频,缓存在哪个文件
- ¥15 自定义损失函数报输入参数的数目不足
- ¥15 如果我想学习C大家有是的的资料吗
- ¥15 根据文件名称对文件进行排序
- ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
- ¥15 有人会用py或者r画这种图吗