如何先声明struct并稍后在switch语句中初始化它?

时间:2017-08-10 07:45:36

标签: go struct

我想首先声明一个结构,然后在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

1 个答案:

答案 0 :(得分:3)

由于您的变量声明的范围。您正在隐藏switch语句中的变量声明。

只需将car:=更改为car=,您就可以了。您可能还想将car:=&Car{}更改为var car *Car。这将使您的意图更清晰,避免不必要的分配(因为您正在创建一个从未使用过的新对象)。

了解blocks & scopes并查看Go语言参考的scoping部分。