2017-08-10 9 views
0

私はGoを本当に好きですが、もしかしたら地獄について、そして他の言語のGoコードでデータ型を同期していると私は夢中になります。 Goの開発者は、Goの慣用的な解決策はコード生成だと言いますが、C/C++の場合はマクロを使って簡単に処理できますが、すぐに使用できる解決策は見つかりませんでした。慣用の生成/前処理ソリューションライブラリ?

だから、基本的に、私は必要なもの、それは特別な設定ファイルにリストされている場合、すべてのタイプの使用状況の確認のために、ソースを読む

  1. のようなものです。そうであれば、configから変更してください。
  2. 設定ファイルにリストされているかどうかに関わらず、すべての機能チェックのソースを読み込みます。それがそうであれば、テンプレートによる設定からコードスニペットで変更し、欠落している場合は必要なインポートを追加してください。
  3. おそらく、戻り値に基づいて多型を追加して、型キャストを防ぐことができます。
  4. おそらく、(err error)ロジックを追加します。それは良いアイデアだとは思わない。

この

は、私はおよそASTを行く知っ

func getConn(id platform.UUID) (res1 string, res2 platform.res) { 
    res1 = driver_native_res(id) 
    res2 = driver_native_res(id) 
    return 
} 

コード-gen.go

import (
    "linux" 
) 
func getConn(id uint64) (res1 string, res2 int32, err error) { 
    res1, err = linux.GetResAsString(id) 
    if err != nil { 
    return 
    } 
    res2, err = linux.GetRes(id) 
    if err != nil { 
    return 
    } 
    return 
} 

をcode.goが、それはとてもではないように思えるのようにそのような機能を実装するのが早い。私はいくつか簡単な解決策があることを願っています

+0

[本、ツール、ソフトウェアライブラリ、チュートリアル、またはその他のオフサイトリソースを推奨するかどうかを尋ねる質問は、オピニオン回答とスパムを引き付ける傾向があるため、スタックオーバーフローに関するトピックです。](https:// stackoverflow .com/help/on-topic) – Adrian

答えて

0

あなたが発見したように、マクロは存在しない可能性があります。ある時点ではジェネリック医薬品が有用かもしれません。その間、コード生成にはいくつかのオプションがあります。あなたはこのために発生行く使用することができます。

// add a magic comment to your go file 
// which needs some extra generated code 
// this calls a tool called stringer to generate, 
// but it could be yacc or some homemade tool. 
//go:generate stringer -type=Pill 

// call go generate to generate the methods: 
go generate 

https://blog.golang.org/generate

しかし、それは本当にあなたがストリンガーようにするコードを生成するツールを持っている必要があります。

または、text/templateを使用して独自のテンプレートを作成し、このテンプレートに値を代入する単純なツールを実行できます(設定ファイルまたはコマンドラインの引数から)。

mytool generate -type=thing -field=type... 
... mytool loads a tmplate file, 
runs it through text/template and outputs it. 

これはかなり簡単で、カスタムシステムを簡単に構築できますが、コードを一度生成してから使用することをお勧めします。ここでは、このアプローチのいくつかの例は以下のとおりです。

http://clipperhouse.github.io/gen/

https://github.com/fragmenta/fragmenta

最後に、あなたは正確にように聞こえるクロス言語コミュニケーションを容易にするために、複数の言語で構造体を生成grpcのようなツールを使用することができます私が最初にgrpcのようなものを見てみたい

https://grpc.io/docs/quickstart/go.html

:あなたが探しているケースを使用。

+0

[本、ツール、ソフトウェアライブラリ、チュートリアル、その他のオフサイトリソースをお薦めするか、見つけようとする質問は、オピニオン回答とスパムを引き付ける傾向があるため、 ](https://stackoverflow.com/help/on-topic)この質問には回答しないでください。 – Adrian

+0

特別なgrpcに感謝、本当にこのようなものを使用する必要があります(ただしGoogleの認証なし)。 – Ximik

関連する問題