我正在遍历 Go 中的一个切片,该切片由我制作的名为 Product 的结构组成。
我想将此切片转换为地图,以便产品 ID 是键,产品是值。
这是我创建的结构。
type Product struct {
productID int `json:"prodId"`
Manufacturer string `json:"manufacturer"`
PricePerUnit string `json:"ppu"`
Sku string `json:"sku"`
Upc string `json:"upc"`
QuantityOnHand int `json:"qoh"`
ProductName string `json:"prodName"`
}
这是我创建的功能...
func loadProductMap() (map[int]Product, error) {
fileName := "products.json"
_, err := os.Stat(fileName) //os package with the Stat method checks to see if the file exists
if os.IsNotExist(err) {
return nil, fmt.Errorf("file [%s] does not exist", fileName)
}
file, _ := ioutil.ReadFile(fileName) //reads the file and returns a file and an error; not concerned with the error
productList := make([]Product, 0) //initialize a slice of type Product named productList, length is zero
err = json.Unmarshal([]byte(file), &productList) // unmarshal/decode the json file and map it into the productList slice
if err != nil {
log.Fatal(err)
}
prodMap := make(map[int]Product) //initialize another variable called prodMap and make a map with the map key being an integer and the value being of type Product
fmt.Println(len(productList))
for i := 0; i < len(productList); i++ { //loop over the productList slice
prodMap[productList[i].productID] = productList[i] //the productMap's key will be the productList product's ID at i and it's value will be the actual product (name, manufacturer, cost, etc) at productList[i]
fmt.Println(prodMap)
}
fmt.Println(prodMap)
return prodMap, nil
}
还有更多代码,但除了 for 循环之外,所有代码都可以正常工作。当我在 for 循环中打印出 prod 映射时,它确实会单独检查 productList 中的每一项(190 项),但它只会返回一项 - 最后一项。我应该以某种方式将每次迭代附加到地图上吗?我在视频教程旁边进行编码,并拥有教程视频中的源文件,与他们的代码相比,我的代码找不到任何问题......