Я начинаю с Go, и официальная документация кажется больше для людей, которые знают Иди уже и просто хочу посмотреть материал. Я надеюсь на небольшой толчок в правильном направлении здесь.
Что я хочу сделать: разобрать файл конфигурации TOML
с помощью анализатора TOML BuntSushi, который состоит из нескольких элементов, имеющих одинаковые базовые характеристики.
На чем я застрял. Я хочу, чтобы соответствующие части каждого элемента были перечислены вместе с элементом. Пока я могу получить только один из них по его индексу. Я ищу, как настроить его таким образом, чтобы перечислялись все части соответствующего индекса, а не только конкретный. Я могу получить список JSON с помощью [:]
, но не могу адаптировать его для получения нормального вывода.
Первоначально я рассматривал [[item.part.001]]
и так далее, потому что это выглядело правильно в онлайн-парсерах JSON, но не смог понять, как правильно прочитать это в Go. Поскольку я все равно застрял, я открыт для обоих типов, что работает лучше.
Заранее спасибо. Вот файлы в качестве сокращенного минимального рабочего примера.
demo.toml
# — — — — — — — — — — — — — — — — — — — — — — —
# First Item
# — — — — — — — — — — — — — — — — — — — — — — —
[[item]]
itemname = "Fragments"
itemdesc = "This one can get a bit longer."
[item.attributes]
material = "Basematname"
light = "Lightname"
transpc = "full"
displace = "height"
[[item.part]]
partname = "Shard"
partlink = "active"
[[item.part]]
partname = "Tear"
partlink = "deferred"
[[item.part]]
partname = "crater"
partlink = "disabled"
# — — — — — — — — — — — — — — — — — — — — — — —
# Second Item
# — — — — — — — — — — — — — — — — — — — — — — —
[[item]]
itemname = "Splash"
itemdesc = "This one also can get a bit longer."
[item.attributes]
material = "Other Basematname"
light = "Other Lightname"
transpc = "half"
displace = "bump"
[[item.part]]
partname = "Drops"
partlink = "active"
[[item.part]]
partname = "Wave"
partlink = "deferred"
демо.го
package main
import (
"fmt"
"github.com/BurntSushi/toml"
)
type item struct {
ItemName string
ItemDesc string
Attributes attributes
Part []part
}
type part struct {
PartName string
PartLink string
}
type attributes struct {
Material string
Light string
TransPC string
Displace string
}
type items struct {
Item []item
}
func main() {
var allitems items
if _, err := toml.DecodeFile("demo.toml", &allitems); err != nil {
fmt.Println(err)
return
}
fmt.Printf("\n")
for _, items := range allitems.Item {
fmt.Printf(" Item Name: %s \n", items.ItemName)
fmt.Printf(" Description: %s \n\n", items.ItemDesc)
fmt.Printf(" Material: %s \n", items.Attributes.Material)
fmt.Printf(" Lightmap: %s \n", items.Attributes.Light)
fmt.Printf(" TL Precision: %s \n", items.Attributes.TransPC)
fmt.Printf(" DP Channel: %s \n", items.Attributes.Displace)
fmt.Printf(" Part Name: %s \n", items.Part[0].PartName)
fmt.Printf(" Part Link: %s \n", items.Part[0].PartLink)
# ^
# That's where [:] won't do it.
fmt.Printf("\n────────────────────────────────────────────────────┤\n\n")
}
fmt.Printf("\n")
}
part
является подмассивомitem
, если вы хотите распечатать всеitem.part
для каждого элемента, вам нужен вложенный цикл. - person rjsberry   schedule 18.12.2017parts
наподобиеitems
и поместить для нее итерациюfor
в структуруfor _, items
. Неа. Я думаю, что проблема связана с чтениемdemo.toml
вallitems
и незнанием того, как я могу правильно добраться до этого мешка данных из цикла. ... означает: Помогите! - person Voodoopants   schedule 19.12.2017