2017-08-04 4 views
-3

JSONレスポンスに役立つライブラリを作りたいと思います。 Javaでは、私はこれを既に持っています。私はGoで新しく始めました。Javaコードをどのように変換するのか分かりません。私はジェネリック薬のようなものは持っていませんが、私の問題を解決するにはどうすればいいのですか?Generic in Goのソリューション

私は、次のコードの一部について話している:

@Data 
public class ServiceResult<T extends Serializable> implements Serializable { 

    private ServiceResultStatus status; 
    private String type; 
    private T content; 
    private String hash; 
    private String destination; 
    private HashMap<String, Metadata> metadata = new HashMap<>(); 

... 

サービス-結果のアイデアは、RESTful Webサービスのための構造的なパターンを提供することです。あなたはより多くの情報が必要な場合は、ここでのGithub上の私のレポへのリンクは次のとおりです。https://github.com/Viascom/service-result

サービス-結果は、このような終わりになります

{ 
    "status": "successful", 
    "type": "ch.viascom.example.models.response.GetTasksResponse", 
    "content": [ 
    { 
     "id": "3e99c7fb-0ed7-11e7-a7a5-0050569c3e5a", 
     "name": "Example Task" 
    } 
    ], 
    "hash": "7bf9c04d1e9f8fe7995e4b8beeac1a4c830e7ea", 
    "destination": "ch.viascom.example.handler.TaskHandler", 
    "metadata": { 

    } 
} 
+3

最初のヒント:Java(または他の言語)をGoに翻訳しないでください。 Goのイディオムを使って、新しいコードを書く。 – Flimzy

+0

@Flimzyこの特定のケースでは、「熟語が行く」は「コピー貼り付け」を意味しますか? – zerkms

+1

@zerkms:あなたが何を意味するのか分かりません。私は実際にあなたが何をしようとしているのかは分かりません。なぜなら、あなたは機能コードを含んでおらず、データタイプと定義だけです。したがって、Goのイディオムを未知の問題に処することは本当に難しいです。 – Flimzy

答えて

2

あなたは構造体に直接JSON-マッピングを追加することができますエンコーダ、デコーダを使用して整列化および非整列化します。それはすべて他の言語よりも簡単に組み込まれています。ここ

type ServiceResponse struct { 
    Value string`json:"nameInJsonResponse"` 
} 

は遊び場の良い例である:あなたの特定のケースについてはhttps://play.golang.org/p/4L2wMVv7tW

それはこのようなものでなければなりません:あなたはしたくない場合は

type ServiceResult struct { 
    Status ServiceResultStatus`json:"status"` 
    Type string`json:"type"` 
    Hash string`json:"hash"` 
    Destination string`json:"destination"` 
    Metadata map[string]Metadata metadata`json:"metadata"` 
} 

type ExplizitServiceResult struct { 
    ServiceResult 
    Content SomeStruct`json:"content"` 
} 

https://play.golang.org/p/FFfiq6LxVt

すべての構造体を挿入できるように、ServiceResultからすべてのユーザー構造体を派生させるために、コンテンツをinterface{}と定義することができます。私はこのための私の例を更新しました。おそらく、これはあなたの問題に対する最も簡単な解決策です。 https://play.golang.org/p/LNgreqrnnw

+0

それでは、非常に構造的なOPが提供されているのですか?運動場でのあなたの参照は簡単で、OPが観察する問題には関係しません。 – zerkms

+0

私の答えを編集しました。私はこれがうまくいくと思います。 – Auskennfuchs

+0

今はずっと良いです。 – zerkms