我已经编写了一些代码,用于按照一本名为The Go Programming Language的书的指南打印在URL中找到的内容.编译器抱怨以下代码no new variables on left side of :=.
package main
import (
"fmt"
"net/http"
"os"
"io"
)
func main() {
for _, url := range os.Args[1:] {
resp, err := http.Get(url)
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
os.Exit(1)
}
_, err := io.Copy(os.Stdout, resp.Body)
resp.Body.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
os.Exit(1)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是由重新声明某些变量引起的.而下面的一个通过了汇编.
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
for _, url := range os.Args[1:] {
resp, err := http.Get(url)
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: %v\n", err)
os.Exit(1)
}
b, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
fmt.Fprintf(os.Stderr, "fetch: reading %s: %v\n", url, err)
os.Exit(1)
}
fmt.Printf("%s", b)
}
}
Run Code Online (Sandbox Code Playgroud)
它没有重新声明变量err吗?那它怎么能通过汇编呢?
如果赋值中有任何新变量(例如b),那么:=将创建它.如果所有变量都不是新变量,那么您将收到错误._不是一个新变量.
由于您拥有所有现有变量,因此可以使用=作为您的io行:
_, err = io.Copy(os.Stdout, resp.Body)
Run Code Online (Sandbox Code Playgroud)
当你使用b而不是_then:=声明b但被视为err标准赋值(即就像使用了a =)
| 归档时间: |
|
| 查看次数: |
5057 次 |
| 最近记录: |