golang如何连接[]字节键vaules与其他变量

时间:2016-12-14 15:19:16

标签: go

如何将变量值连接到字节键值?

type Result struct {
        SummaryID       int              `json:"summaryid"`
        Description     string           `json:"description"` 
    }

byt := []byte(`
                        {
                            "fields": {                                                              
                               "project":
                               { 
                                  "key": "DC"
                               },
                               "summary": "Test" + Result.SummaryID,    
                               "description": Result.Description,
                               "issuetype": {
                                  "name": "Bug"
                               }
                           }
                        }`)

注意:Result.SummaryIDResult.Description的值从db.Query()rows.Scan()返回。

1 个答案:

答案 0 :(得分:1)

Go不支持字符串插值,因此如果您想用较小的子字符串组合字符串,则必须使用fmt.Sprintftemplate包之类的内容。

你可以像这样做前者:

var buf bytes.Buffer
byt := []byte(fmt.Sprintf(`
                    {
                        "fields": {
                          "project":
                           { 
                              "key": "DC"
                           },
                           "summary": "Test%d",
                           "description": "%s",
                           "issuetype": {
                              "name": "Bug"
                           }
                       }
                    }`, result.SummaryID, result.Description))

虽然我真的会建议不要这样做,因为encoding/json包是为安全而合理地输出JSON字符串而设计的。

Here's an example使用struct embedding作为主对象,并映射到其他地方以演示这两种方法。

type WrappedResult struct {
    Project map[string]string `json:"project"`
    Result
    IssueType map[string]string `json:"issuetype"`
}

byt, err := json.MarshalIndent(map[string]interface{}{
    "fields": WrappedResult{
        Result: result,
        Project: map[string]string{ "key": "DC" },
        IssueType: map[string]string{ "name": "Bug" },
     },
});

(请注意,您的类型声明与您的JSON示例相矛盾,因为前者指定summaryid,但后者具有summary