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 {

在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 {
        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只需尝试一下。不必在这里大惊小怪。