2016-12-14 9 views
-5

バイト値に変数値を連結する方法は?golang []バイトキーを他の変数と連結する方法

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.SummaryIDの値とdb.Query()rows.Scan()からResult.Description復帰。

答えて

1

Goは文字列補間をサポートしていないため、小さな部分文字列から文字列を作成する場合は、fmt.Sprintfまたはtemplateパッケージを使用する必要があります。 encoding/jsonパッケージが安全かつsanely JSON文字列を出力するために設計されているので、私は本当に、それに対して助言するものの

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

あなたはそうのような元を行うことができます。

メインオブジェクトの構造体埋め込みを使用し、他の場所をマッピングして両方のアプローチを示すマップです。

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" }, 
    }, 
}); 

(自分の型宣言は、その前の指定summaryidであなたのJSONの例と矛盾するが、後者はsummaryを持っていることに注意してください)

+0

すごいです!短くて優れたソリューション。あなたを愛してます!偉大な仕事を続けてください。 – Rocky

関連する問題