当前位置: > > > > 将 Bitrise YAML 键/值列表解析为 Go 结构
来源:stackoverflow
2024-04-25 09:45:33
0浏览
收藏
IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天给大家整理了《将 Bitrise YAML 键/值列表解析为 Go 结构》,聊聊,我们一起来看看吧!
问题内容
我目前正在处理 bitrise 工作流程步骤,并且我正在尝试允许该步骤为用户提供一种为特定步骤输入提供可选 yaml 键/值对列表的方法,当前正在尝试实现如:
my_step@1: inputs: - uri_actions: - button_text: some text uri: www.google.com - button_text: some text 2 uri: www.google2.com - button_text: some text 3 uri: www.google3.com
然后尝试在 go 中将其解析为结构:
type config struct { uriactionlist []uriaction `env:"uri_actions"` } type uriaction struct { buttontext string `env:"button_text"` uri string `env:"uri"` }
并且还尝试将 config
结构映射为
type config struct { uriactionlist map[uriaction]string `env:"uri_actions"` }
bitrise 步骤使用 stepconf
自动解析用户的工作流程并将 yaml 映射到声明的 structs
:
func main() { var cfg config if err := stepconf.Parse(&cfg); err != nil { fmt.Fprintf(os.Stderr, "Error: %s\n", err) os.Exit(1) } stepconf.Print(cfg) }
但是两者都玩得不好..
这是我第一次尝试 go 并开发自己的 bitrise 步骤,那么我做错了什么?或者是否有更文明的方式来实现这一目标?
解决方案
编辑:根据评论中的讨论,这个问题与用于解析 yaml 的 go-steputils/stepconf
库相关。但该库根本不对 yaml 文件进行操作,只是使用一些糖来解析环境来处理集合(请参阅库用法 和 )。我的猜测是某个地方有一些管道可以将 yaml 转换为环境变量。
如果您打算在没有该管道的情况下从文件中读取 yaml,我建议您使用记录良好的库来实现此目的 – ,如下例所示:
type config struct { Inputs []Inputs `yaml:"inputs"` } type Inputs struct { UriActionList []UriAction `yaml:"uri_actions"` } type UriAction struct { ButtonText string `yaml:"button_text"` Uri string `yaml:"uri"` } func main() { cfg := config{} err := yaml.Unmarshal([]byte(data), &cfg) if err != nil { log.Fatalf("error: %v", err) } fmt.Printf("---\n%v\n", cfg) }
请参阅带有工作代码 的演示
以上就是《将 Bitrise YAML 键/值列表解析为 Go 结构》的详细内容,更多关于的资料请关注公众号!