Golang:一个地图接口,如何打印键和值

卓琮偉*_*卓琮偉 0 interface go

我得到一个地图界面,如:

getUsersAppInfo := usersAppInfo.GetUsersAppInfo(getUserId)
Run Code Online (Sandbox Code Playgroud)

然后我打印:

fmt.Println(getUsersAppInfo)
Run Code Online (Sandbox Code Playgroud)

得到这个,比如:

[map[appId:2 fcmServerKey:keyTestTest name:com.app]]
Run Code Online (Sandbox Code Playgroud)

问:如何只打印值,比如

appId value is 2 
name value is com.app 
fcmServerKey:keyTestTest value is keyTestTest 
Run Code Online (Sandbox Code Playgroud)

poW*_*War 13

我不建议在生产设置中执行此操作。但是,当我想在开发盒上打印出没有太多代码的地图时,我会打印 JSON 序列化版本。在生产中这样做是犯罪行为。

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    a := map[string]interface{}{"appId": 2, "fcmServerKey": "keyTestTest", "name": "com.app", "version": []int{1, 2, 3}, "xyz": 3}
    bs, _ := json.Marshal(a)
    fmt.Println(string(bs))
}
Run Code Online (Sandbox Code Playgroud)

输出:

{"appId":2,"fcmServerKey":"keyTestTest","name":"com.app","version":[1,2,3],"xyz":3}

  • 为什么它在产品中是犯罪?慢吗? (2认同)
  • @nanakondor,因为序列化是一项成本高昂的操作。因此,如果您要执行此操作,例如在高吞吐量请求 (1k> req/s) 上,您的实例将在此操作本身上花费相当多的时间,其唯一目的是进行调试。 (2认同)

thw*_*hwd 7

OP 对该问题的评论指出,类型getUsersAppInfo[]map[string]interface{}.

在地图切片上循环。对于每个地图,遍历键和值并打印。

// loop over elements of slice
for _, m := range getUsersAppInfo {

    // m is a map[string]interface.
    // loop over keys and values in the map.
    for k, v := range m {
        fmt.Println(k, "value is", v)
    }
}
Run Code Online (Sandbox Code Playgroud)

在 GoLang PlayGround 上运行它