go - 如何在 switch 语句中先声明结构然后再初始化它?

标签 go struct

<分区>

我想先声明一个结构,然后在 switch 语句中初始化它。到目前为止我编写的代码显示 Improve this question 错误。但是,我认为问题与我的情况有所不同,并且与声明范围有关。

有人可以帮我使下面的代码工作吗?

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

最佳答案

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

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

了解 blocks & scopes并查看 scoping Go 语言引用部分。

关于go - 如何在 switch 语句中先声明结构然后再初始化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45607483/

相关文章:

google-app-engine - 如何在 Go AppEngine 中将数据存储查询存储到内存缓存?

xml - Golang 解码 MusicXML

go - vendor 目录未用于解析 go build 中的导入

c - 什么时候在 C 中使用指向指针的指针?

C++ 非静态数据成员的无效使用

go - golang中的插入排序

logging - 将日志内容写入golang中的自定义文件

c - 重新分配后我无法读取字符串

struct - rust:如何使用引用外部值的回调编写 `impl`

c - 尝试在 C 中初始化结构体时出错