gpt4 book ai didi

Golang : no new variables on left side of :=, 而类似的没有出现这个错误

转载 作者:IT王子 更新时间:2023-10-29 00:36:11 24 4
gpt4 key购买 nike

我已经按照一本名为The Go Programming Language 的书的指南编写了一些代码来打印在 URL 中找到的内容。编译器提示以下代码 := 左侧没有新变量

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)
}
}
}

而且我知道这是由于某些变量的重新声明引起的。而下一个则通过了编译。

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)
}
}

不是重新声明了变量err吗?那它怎么能通过编译呢?

最佳答案

如果赋值中有任何新变量(例如 b),则 := 将创建它。如果所有变量都不是新的,那么您会得到您遇到的错误。 _ 不是新变量。

因为你有所有现有的变量,你可以只使用 = 作为你的 io 行:

_, err = io.Copy(os.Stdout, resp.Body)

当您使用 b 而不是 _ 时, := 声明了 b 但将 err 视为标准赋值(即就像使用 = 一样)

关于Golang : no new variables on left side of :=, 而类似的没有出现这个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41574028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com