英文:
How to declare struct first and initiliaze it later in switch statement?
问题
我想先声明一个结构体,然后在switch语句中对其进行初始化。到目前为止,我编写的代码显示了[declared and not used]错误。然而,我认为问题在于我的情况不同,并且与声明的作用域有关。
有人可以帮我使下面的代码正常工作吗?
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
英文:
I would like to declare a struct first and then initialize it inside a switch statement. The code I've written so far shows declared and not used errors. However, I think the problem is different in my case and related to scope of declaration.
Could somebody please help me to make the below code work?
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));
}
Errors
$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
答案1
得分: 3
这是由于你变量声明的作用域问题。你在switch语句内部重复声明了变量。
只需将car:=
改为car=
,问题就会解决。你可能还想将car:=&Car{}
改为var car *Car
。这样可以更清晰地表达你的意图,并避免不必要的内存分配(因为你创建了一个从未使用的新对象)。
请阅读有关块和作用域的内容,并查看Go语言参考手册中的作用域部分。
英文:
It's due to the scope of your variable declarations. You are shadowing the variable declaration inside the switch statement.
Simply change car:=
to car=
and you will be fine. You might also want to change car:=&Car{}
to var car *Car
. This will make your intent clearer and avoid an unnecessary allocation (as you are creating a new object which is never used).
Read about blocks & scopes and see the scoping section of the Go language reference.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论