首頁 >後端開發 >Golang >Go,解組為大寫鍵

Go,解組為大寫鍵

WBOY
WBOY轉載
2024-02-14 09:36:091215瀏覽

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)

https://www.php.cn/link/e18cfe46b96c30852b565e561152d055

以上是Go,解組為大寫鍵的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除