繁体   English   中英

在 Go 中将映射转换为字符串

[英]Converting map to string in Go

我正在尝试找到将map[string]string转换为字符串类型的最佳方法。

我尝试通过编组转换为 JSON 以保留格式,然后再转换回字符串,但这并不成功。

更具体地说,我正在尝试将包含键和值的映射转换为字符串以适应环境变量structs.go

例如,最终的字符串应该是

LOG_LEVEL="x"
API_KEY="y"

地图

m := map[string]string{
        "LOG_LEVEL": "x",
        "API_KEY": "y",
    }

您需要在代表一个地图条目的每一行上使用一些 key=value 对,并且需要在值周围加上引号:

package main

import (
    "bytes"
    "fmt"
)

func createKeyValuePairs(m map[string]string) string {
    b := new(bytes.Buffer)
    for key, value := range m {
        fmt.Fprintf(b, "%s=\"%s\"\n", key, value)
    }
    return b.String()
}

func main() {
    m := map[string]string{
        "LOG_LEVEL": "DEBUG",
        "API_KEY":   "12345678-1234-1234-1234-1234-123456789abc",
    }
    println(createKeyValuePairs(m))

}

这是Go Playground 上的一个工作示例

您可以使用fmt.Sprint将地图转换为字符串:

import (
    "fmt"
)

func main() {
    m := map[string]string{
        "a": "b",
        "c": "d",
    }

    log.Println("Map: " + fmt.Sprint(m))
}

fmt.Sprintf

import (
    "fmt"
)

func main() {
    m := map[string]string{
        "a": "b",
        "c": "d",
    }

    log.Println(fmt.Sprintf("Map: %v", m))
}

我会这样做非常简单和务实:

package main

import (
    "fmt"
)

func main() {
    m := map[string]string {
        "LOG_LEVEL": "x",
        "API_KEY":   "y",
    }

    var s string
    for key, val := range m {

        // Convert each key/value pair in m to a string
        s = fmt.Sprintf("%s=\"%s\"", key, val)

        // Do whatever you want to do with the string;
        // in this example I just print out each of them.
        fmt.Println(s)
    }
}

您可以在The Go Playground中看到这一点。

这可以工作:

// Marshal the map into a JSON string.
mJson, err := json.Marshal(m)
if err != nil {
    fmt.Println(err.Error())
    return
}

jsonStr := string(mJson)
fmt.Println("The JSON data is: ")
fmt.Println(jsonStr)

我们可以使用github.com/wissance/stringFormatter v1.0.1 ( https://github.com/Wissance/stringFormatter ) 中的 sf.MapToStr 函数将地图转换为单行:

// ...
import (
    sf "github.com/wissance/stringFormatter"
)
// ...
func MyFunc() {
    options := map[string]interface{}{
        "connectTimeout": 1000,
        "useSsl":         true,
        "login":          "sa",
        "password":       "sa",
    }

    str := sf.MapToString(&options, sf.KeyValueWithSemicolonSepFormat, ", ")
    fmt.Println(str)
}
jsonString, err := json.Marshal(datas) 
fmt.Println(err)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM