我想首先声明一个结构,然后在switch语句中初始化它。我到目前为止编写的代码显示了TaskState
个错误。但是,我认为问题在我的案例中有所不同,与申报范围有关。
有人可以帮我制作下面的代码吗?
Car.go
package main
import "fmt"
import "strconv"
type Car struct{
Name string
Price int
}
func main(){
name := "Fiat"
car := &Car{}
switch name {
case "Fiat":
car := &Car{
Name : "Fiat",
Price: 600000,
}
case "Mercedes-benz":
car := &Car{
Name : "Mercedes-benz",
Price: 5600000,
}
default:
car := &Car{
Name : "Toyota",
Price: 1000000,
}
}
fmt.Println("Car Name : " + car.Name + " Price : " + strconv.Itoa(car.Price));
}
错误
$go run Car.go
./Car.go:19: car declared and not used
./Car.go:24: car declared and not used
./Car.go:29: car declared and not used
答案 0 :(得分:3)
由于您的变量声明的范围。您正在隐藏switch语句中的变量声明。
只需将car:=
更改为car=
,您就可以了。您可能还想将car:=&Car{}
更改为var car *Car
。这将使您的意图更清晰,避免不必要的分配(因为您正在创建一个从未使用过的新对象)。
了解blocks & scopes并查看Go语言参考的scoping部分。