```
package main
import (
"fmt"
)
func main() {
ss := []string{"2", "3", "4"}
for i := range ss {
fmt.Println(i)
}
fmt.Println(ss)
}
```
range 函数不是返回两个值的吗,为什么我这里定义一个值,没有报错,我也没有用_啊
不是的,语言规范里说了,If the last iteration variable is the blank identifier, the range clause is equivalent to the same clause without that identifier. for i, _ := range ss 跟 for i := range 是效果一样的
#1
更多评论
那么a := os.Open("a.txt") 这样为什么会报错multiple-value os.Open() in single-value context, 这个不能这样用,还是只有range可以这样
#2
我个人认为 range 这种情况属于 go 的语法糖吧,因为用的频率比较大,给开发者尽量多的方便,类似的还有类型断言 obj, ok := i.(Type),map obj, ok := m[key], 这两个种情况,第二个变量 ok 都是可以省略掉的,因为这几种情况省略掉后面的 ok 不会影响到我们程序的正常运转,也不会丢失重要的信息。
但是 os.Open() 这个函数返回的值就不一样了,函数返回了多少个值,我们就必须要用多少个对应类型的变量去接收,这个是有明确规定的。,除非显示用 _ (忽略) 告诉编辑器我不需要这个值。
#3