首页 > 后端开发 > Golang > 正文

Go,解组为大写键

WBOY
发布: 2024-02-14 09:36:09
转载
1166 人浏览过

Go,解组为大写键

php小编草莓在这里为大家介绍一种实用的技巧,那就是"Go,解组为大写键"。这个技巧可以帮助我们更快速、高效地进行编程工作。当我们在编写代码时,经常需要对一段代码进行注释或取消注释,而手动添加或删除注释符号会相对繁琐。但是,通过使用"Go,解组为大写键"的方式,我们可以快速地对代码进行注释或取消注释,大大提升了我们的工作效率。下面,让我们一起来了解具体的操作方法吧!

问题内容

后续key总是小写? 第923章

我正在寻找将非结构化 yaml 解组为 golangcasing 键的最简单方法。详情--

看看

https://go.dev/play/p/nihdqorpek1

即,

package main

import (
    "fmt"
    "log"

    "gopkg.in/yaml.v3"
)

var data = `
a: Easy!
b:
  c: 2
  d: [3, 4]
`

// Note: struct fields must be public in order for unmarshal to
// correctly populate the data.
type T struct {
    A string
    B struct {
        RenamedC int   `yaml:"c"`
        D        []int `yaml:",flow"`
    }
}

func main() {
    m := make(map[interface{}]interface{})

    err := yaml.Unmarshal([]byte(data), &m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- m:\n%v\n\n", m)

    d, err := yaml.Marshal(&m)
    if err != nil {
        log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- m dump:\n%s\n\n", string(d))
}
登录后复制
  • 第 10 行的数据始终被解组为 m 中的小写键。
  • 为了将 then 解组为大写键,我必须预先定义一个结构体,如第 19 行。
  • 但是,我面临的挑战是我正在处理非结构化 yaml,即我事先不知道它们的结构。

一个后续评论说他们“正在从 gopkg.in/yaml.v3 切换到 sigs.k8s.io/yaml”,但正在阅读 sigs.k8s.io/yaml 的文档,我觉得他们还是需要了解yaml的结构,而且还需要提前定义好翻译机制。

是否有任何简单的方法可以将非结构化 yaml 解组为大写/golangcasing 键?最简单的方法是什么?如果没有 go 包提供此类开箱即用的功能,那么它们中是否有任何插件/回调可以让我自己轻松地进行翻译?

解决方法

您可以声明实现 yaml.unmarshaler 接口的自定义密钥类型。

类似这样的事情:

type mykey string

func (k *mykey) unmarshalyaml(n *yaml.node) error {
    var s string
    if err := n.decode(&s); err != nil {
        return err
    }
    *k = mykey(strings.toupper(s))
    return nil
}
登录后复制

然后将其用作地图的键。

m := make(map[MyKey]any)
登录后复制

//m.sbmmt.com/link/e18cfe46b96c30852b565e561152d055

以上是Go,解组为大写键的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!