Golang Go语言挠秃头了求大神解救
Golang Go语言挠秃头了求大神解救
菜鸟写了个递归复制文件夹文件的程序 到了关键一步出了点小问题 主要是 CopyFile 函数 先在全局定义了一个缓冲大小为 200 的管道 但是写在 CopyFile 函数 最后的话由于 linux 系统设置文件打开的最大句柄数为 1024 会报 open too many file 错误 但是如果写在 CopyFile 函数 开头的话 整个程序又会一下就结束 无法等待运行完毕 求各位大神搭把手 99 我 8 对了 pathSlice 的长度为 2700 多
更多关于Golang Go语言挠秃头了求大神解救的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你加个 channel 限制一下同时 copy 的数量啊…
更多关于Golang Go语言挠秃头了求大神解救的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
抱歉 小弟愚钝 不是很明白 是在 for 循环里面加吗
用了 go 关键字,就得知道锁和同步方式啊,去查查 channel 的具体用法
在你这个设计里面,CopyChan 的定位其实错了,不应该是用它控制程序终止,而是应该用它限制 copy 文件的数量,至于如何让程序在全 copy 完再停止,可以再想想,方法很多的
我还以为楼主是来求脱发防治技巧的
好的谢谢 之前看的都是用 channel 控制程序是否终止的 是我了解的太少了
头发滞销 救救 lz 吧
我觉得你可以使用两个 channel,第一个 channel 用于保证当前最多有不超过 200 个 channel 在进行读写操作,另一个 channel 保证在所有的协程执行完之前主协程不会退出
好的谢谢 我尝试一哈
这个是正解,也可以用 WaitGroup,不过更麻烦,不如加个 channel 省事
主协程等待所有的协程结束可以使用 sync.WaitGroup 来实现
至于多个协程之间的协作,可以使用一个容量为 200 的 channel。每个协程在进入时向 channel 写入一个值,在退出时从 channel 获取一个值,由于 channel 的容量为 200,所以最多有 200 个协程可以工作;如果容量达到上限,当前协程阻塞,等到另一个协程结束(从 channel 中取出了一个值)当前协程才可以继续执行
之前也是试过 waitgroup 但是由于协程方面写的有问题也是不行
跪谢大佬 我试下
搞定了 再次感谢两位大佬
挠了半天头的问题 终于解决了
我是来看如何防脱发的,进来后你竟然给我看这个???🐶
你秃了 也变强了吗?
写 go 的不秃
是吧兄弟?
限制并发数量,可以用信号量,也可以使用 channel
只有我是进来找治秃头配方的吗
看到你在Go语言上遇到了难题,确实编程遇到瓶颈时会让人倍感焦虑。别担心,作为IT领域的Go语言专家,我来给你一些建议,希望能帮你渡过难关。
首先,确保你对Go语言的基础知识有扎实的理解,包括变量、数据类型、控制结构、函数等。这些基础知识是构建更复杂程序的基石。
如果你正在处理特定的错误或问题,尝试将问题分解成更小的部分,逐一解决。有时候,问题可能出在一个不起眼的细节上,比如类型不匹配或变量作用域问题。
此外,利用Go语言的强大社区资源也是一个很好的选择。你可以在Stack Overflow、GitHub或专门的Go语言论坛上搜索类似的问题,通常能找到有用的答案或解决方案。
如果问题依然无法解决,不妨尝试编写一个简单的示例代码来复现问题。这样做不仅有助于你更清晰地理解问题所在,也方便向他人求助时提供足够的信息。
最后,保持耐心和冷静。编程是一个需要不断学习和实践的过程,遇到困难是很正常的。相信自己,坚持下去,你一定能够克服当前的难题,成为Go语言领域的佼佼者。
如果你有更具体的问题或代码片段需要分析,欢迎随时贴出来,我会尽力帮你解答。加油!