### 遇到一个看似像go bug的写法,想向各位求证! (go版本14.7)
```
package main
import (
"encoding/json"
"fmt"
)
func main() {
ls:=[]uint8{1,2,3,4,5,6}
var jsonBy []byte
for k, v := range ls {
if k == 0 {
fmt.Println(jsonBy)
jsonBy, err := json.Marshal(v)
if err != nil {
fmt.Println("序列化失败")
return
}
//fmt.Println(jsonBy)//位置1,如果放这里,则正确
}
fmt.Println(jsonBy)//位置2,如果放这里,则提示上面的jsonBy未使用,即不可编译通过
}
}
```
### 为了便于观看,给出上面代码的截图
![image.png](https://static.studygolang.com/200927/12c5bfa7e9e3c409634bca47af018771.png)
### 为了修复bug,事实上我的业务必须放在第二个位置而不能放到第一个位置(上面的业务是我业务的简版),看来不是所有的地方都能使用冒号,所以我们为了申请新变量err,就把他在获取值之前先申明,如下代码:
```
package main
import (
"encoding/json"
"fmt"
)
func main() {
ls:=[]uint8{1,2,3,4,5,6}
var jsonBy []byte
for k, v := range ls {
if k == 0 {
fmt.Println(jsonBy)
var err error//err在这里申明
jsonBy, err = json.Marshal(v)//这一行去掉冒号
if err != nil {
fmt.Println("序列化失败")
return
}
//fmt.Println(jsonBy)//位置1,如果放这里,则正确
}
fmt.Println(jsonBy)//位置2,如果放这里,则提示上面的jsonBy未使用,即不可编译通过
}
}
```
### 同理,给出代码截图如下:
![image.png](https://static.studygolang.com/200927/2c9c7376b42c7e2aab6881400b723994.png)
### 好久没法文章,各位怎么看?用了挺久go才遇到这么一个让我疑惑的地方,还请各位大佬支招!
有疑问加站长微信联系(非本文作者))