V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  guonaihong  ›  全部回复第 20 页 / 共 24 页
回复总数  470
1 ... 12  13  14  15  16  17  18  19  20  21 ... 24  
2019-10-04 20:00:53 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见“坑”(3)-switch
@lincanbin 恩。。。
2019-10-04 19:57:56 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见“坑”(3)-switch
@Daming 其实我只是奇怪,在 go 里面 switch 是不需要写 break 的,假如用户写 break,目的很明确都是作用于 for。从实现上来看很容易和用户写的 break 作出区分。
2019-10-04 19:52:05 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见“坑”(3)-switch
@frye go switch 不需要写 break 还是挺迷惑的。不像 c 要时刻写 break,能记得 break 的作用范围。
2019-10-04 19:42:11 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见“坑”(3)-switch
@lance6716 “坑”加双引号,只是想说下,这个设计和大多数人的预期不一样。
2019-10-02 21:51:37 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@heimeil 如果 chan 是带缓冲的,并且因为某些原因不能修改为无缓冲的,可以用下面的该法。你的代码我看了,用两层 for 循环的做法,本质还是想知道 chan 有没有空。直接用个判断就行。

```go
ackage main

import (
"context"
"fmt"
"time"
)

func main() {
ctx, cancel := context.WithCancel(context.Background())

data := make(chan int, 10)

go func() {
for i := 0; i < 10; i++ {
data <- i
}
cancel()
fmt.Println("cancel")
}()

for {
select {
case <-ctx.Done():
if len(data) == 0 {
fmt.Println("Done")
return
}
case v := <-data:
fmt.Printf("v = %d\n", v)
}
}
}

```
2019-10-02 21:40:19 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@reus 感谢分享。
2019-10-02 21:39:55 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@such 和 such 兄想得相反,我倒是不觉得滥用。很多时候一个技术被滥用是带来了性能退化,这里没有性能退化。再者 context 源码里面也是 close chan 再实现通知的。和自己 close chan 来没啥区别。
2019-10-02 16:49:10 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@znood 你是想说,如果不用无缓冲 chan。用超时退出?
2019-10-02 15:59:10 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@znood 这个例子里面不需要 time.After。data chan 消费完。生产者调用 cancel,这时候消费者的 case <- ctx.Done() 就可以返回了。
2019-10-02 14:30:49 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@heimeil 兄弟,我假期用的这台电脑不能翻墙。可否贴下代码,学习下。
2019-10-02 14:23:13 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@znood 你没有明白代码。无缓存 chan 是生产者,消费者同步的。data<-999 写进入 并且返回了。代表消费者已经消费调了。这时候调用 cancel 是安全的。
2019-10-02 14:20:55 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@lishunan246 也可以用 done := make(chan struct{}) 这种方式。自从 go1.7 引入 context 之后,现在都用 context 代替 done 的做法。因为很多标准库的参数是 context,后面如果遇到 done 结束还要控制标准库的函数,就不需要修改了。
2019-10-02 11:35:08 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
写错两个字,纠正下。
@useben useben 兄,用的方式是 data chan 既要当数据通道,又要当结束控制通道。上面的例子是控制和数据分离的写法。有些场景只能用控制和数据分离的方法,个人觉得没有对错之分。
2019-10-02 11:33:30 +08:00
回复了 guonaihong 创建的主题 Go 编程语言 golang 常见坑(1)-select
@useben useben 兄,用的方式是 data chan 既要当数据通道,又要当结束控制通道。上面的例子是控制和数据分离的作用。有些场景只能用控制和数据分离的写法,个人觉得没有对错之分。
@zjsxwc 兄弟正解,我现在就用 go 代码生成 c 的 ABI 然后给 c++调用。这样开发效率可以。
2019-09-29 17:04:46 +08:00
回复了 guonaihong 创建的主题 程序员 超好用的流式 http client,发布啦!
@sunriz 标准库里面 http.Client 需要注意的地方,他里面是个连接池。如果不停的声明新的。会导致 fd 不够用,从而报错,只要保证业务声明一个 http.Client 就行。或者传 nil。
2019-09-29 14:31:44 +08:00
回复了 guonaihong 创建的主题 程序员 超好用的流式 http client,发布啦!
@Immortal 流式这个词看的 smallnest 说的,他写的博客不错。
2019-09-29 12:43:21 +08:00
回复了 guonaihong 创建的主题 程序员 超好用的流式 http client,发布啦!
@Immortal 兄弟,你是第一个看出来的。
2019-09-29 12:36:14 +08:00
回复了 guonaihong 创建的主题 程序员 超好用的流式 http client,发布啦!
@m2276699 c#不可以。不过 go 语法不复杂,看一天就可以写了。还有个 go 特别爽的是,方便交叉编译到 windows, linux,mac 上面。
2019-09-29 12:33:34 +08:00
回复了 guonaihong 创建的主题 程序员 超好用的流式 http client,发布啦!
@GM 兄弟可有好的想法?
1 ... 12  13  14  15  16  17  18  19  20  21 ... 24  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   913 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 21ms · UTC 20:59 · PVG 04:59 · LAX 13:59 · JFK 16:59
Developed with CodeLauncher
♥ Do have faith in what you're doing.