Go 选择语句范围
在Go中,我知道每个新的封闭大括号都声明了一个新的作用域,所有控制流语句都是如此。今天在编写程序时,我遇到了一个场景,需要使用下面的Go 选择语句范围,go,Go,在Go中,我知道每个新的封闭大括号都声明了一个新的作用域,所有控制流语句都是如此。今天在编写程序时,我遇到了一个场景,需要使用下面的select语句 select { case <-ctx.Done(): <-ch return ctx.Err() case resp := <-ch: var b bytes.Buffer if _, err := io.Copy(&b, resp.Body); err != nil {
select
语句
select {
case <-ctx.Done():
<-ch
return ctx.Err()
case resp := <-ch:
var b bytes.Buffer
if _, err := io.Copy(&b, resp.Body); err != nil {
return err
}
}
选择{
case如果打算在select
之后使用,则在select
之外声明var
是完全可以的:
var b bytes.Buffer
select {
case <-ctx.Done():
<-ch
return ctx.Err()
case resp := <-ch:
if _, err := io.Copy(&b, resp.Body); err != nil {
return err
}
}
... // use b here
var b字节。缓冲区
挑选{
case如果打算在select
之后使用,则在select
之外声明var
是完全可以的:
var b bytes.Buffer
select {
case <-ctx.Done():
<-ch
return ctx.Err()
case resp := <-ch:
if _, err := io.Copy(&b, resp.Body); err != nil {
return err
}
}
... // use b here
var b字节。缓冲区
挑选{
case只需将var b
声明移动到select
?在包含b
所有用法的范围内声明b
。听起来该范围好像在select语句之外@ᆼᆺᆼ 如果我通过在select
语句中指定b
来隐藏b
该怎么办?你能为你的意思显示示例代码吗?@cholthipaulttiopicj只需尝试一下。无需在这里大惊小怪。只需将var b
声明移到select
?在包含bb
e> 。听起来好像作用域在select语句之外@ᆼᆺᆼ 如果我在select
statement中为b
赋值,给它加上阴影怎么办?你能为你的意思显示示例代码吗?@cholthipaulttiopicj只需尝试一下。不必在这里大惊小怪。