2017-08-10 8 views
-2

まず構造体を宣言してからswitch文の中で初期化したいと思います。これまでに書いたコードはdeclared and not usedというエラーを示しています。しかし、私の場合は問題が異なり、宣言の範囲に関係すると思います。最初に構造体を宣言し、後でswitch文でinitiliazeする方法はありますか?

誰かが私の下のコードの動作を助けてくれますか?

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 

答えて

3

それはあなたの変数宣言のスコープによるものです。 switch文の中で変数宣言をシャドーイングしています。

car:=car=に変更するだけで問題ありません。 car:=&Car{}var car *Carに変更することもできます。これにより、あなたの意図がより明確になり、不必要な割り当てが回避されます(使用されない新しいオブジェクトを作成する場合)。

Go言語リファレンスのblocks & scopesscopingセクションを参照してください。

+0

問題が範囲にあったことを知りました。正しい構文で私を助けてくれてありがとう:) – Beginner

+0

問題ありません。私たちはすべて一度学習者でした。 –

関連する問題