背景
私たちの主なチームのバックエンド技術スタックは、Python、詳細にそこジャンゴ/のpythonを前述の特定のソフトウェアエンジニアリングの実践です。主にPythonがビジネスを書かないいつものように、自分のプロジェクトはまた、Pythonツールでないので、実際には常に移動を体験してみたかったです。
無料先週、経験ように、土台のビットがGo]を設定し、小さなサービス(マイクロチャネルプッシュメッセージング)と書きます。
この記事では、ゴー萌えPythonistaの新しい道です。そこ不適切な操作は、アップ啓発してください誤謬を、理解します。
文法
言語を使用するには、習慣的に開いているが 、Y分にXを学ぶ 文法上行くことに。
そんなに特別ゴーゴーの構文は、それを書き留めしやすい可能おり、そのキーワードが非常に小さいです。全体的に私は、これらの文法楽しいと思います。
循環
//死のサイクルに直接書き込むことができる ため、{ fmt.Println(「trueにしばらく...」) } //このキーワードは、レンジアップと非常に快適である データ:地図[文字列]文字列{= 「値」:「キーは」 、 } キーに、値= {データ範囲 fmt.Println(「しばらく真へ...」) }
数え上げます
//キーワードイオタは、実際に作製され 、後者の両方が省略されてもよいイオタ@ のconst { 不明イオタ// = 0 男=イオタ//ために。1 女性イオタため= 2 // } //区画10は、の定義を満たします列挙優先 // `イオタ<< 2`ビット操作そのような定義が可能で1/2/4/8 のconst { 不明IOTA * 10 = 0 // 人のため= // 10 10 * IOTA 女性のためのIOTA = 10 * / / 20 }
マルチ裁判官式
//ステートメントは、式の最後の値を取る場合、それは非常に一般的と判断された F場合は、ERR:; {!File.Open =(パス)ERR = nilの 応答を返す(400、err.Error()) } / /このブール演算を分析することが一般的である データは、OK IF:= json.Unmarshal(本体); OK {! 応答を返す(400、 "無効なJSON体") }
ゴルーチン
//生来の同時実行も非常にエレガントな場所です行く FUNC sendTemplate(){ //これは時間のかかる長時間のネットワーク要求のためである } FUNCのhandleRequest(コンテキストctx){ 検証() // sendTemplate() 、速度のためなら、私たち//↑あなたは、キー非同期↓になりますgo`テンプレート、我々は`キーワードを使用し送信するために同期させることができない ゴーsendTemplateを() }
プロジェクト
あまりにも早く第二章への後の最初の章の構文は:「どのように行くとプロジェクトを再生します」
コードを記述し、我々は最初に判明した文書を見なければなりません。だから、最初のピットストップがある 公式サイトgolang.org
ゴーの公式ウェブサイトは、最も基本的で、実際には非常に友好的である 環境にどのように教えるために、最初のプロジェクトに書いた 、 効果的な移動を この包括的な長いテキストがシンプルかつ明白なポイントです。
その後最初に、言語環境を使用してインストールし GOPATH
た環境変数は、ビットを再生します。しかし、後に行くがわかっ1.12はモッズ行くの後に来る、単にライン上でこの概念を見てください。その後、我々は最初のツール・バー・チェーンに直接移動を感じ始めるために、それを置きます。
ツールチェーン
メイン後にインストールのPythonは、パッケージマネージャをピップとREPLが付属しています。FMT /テスト/獣医/はMODなどで構築された一連のツールが含まれます、後でインストール移動します。
go fmt
- これはゴー最大の印象を始めるための最初のツールです。
- それは、非常に厳格なツールをフォーマットサポートされていない構成のコードです
- スペース上のタブを好みます
go test
- カバレッジが来る、非常に良い使用
go vet
- リンターが来るようです
再生 go test
、それがためにそれがあることが判明した package
、テストを行うために、内部行く package
コンセプトも非常に顕著です。例えば、パッケージのメソッドを呼び出すときには、パッケージ名を追加することですので、「非オーバーラップ命名」ルールがあるのベストプラクティス。(栗の場合、そのようなメソッドが呼び出されるべきである xml.Parser
代わりに xml.XMLParser
)
ビジネスを書きます
私たちは、内部ネットワークは、RESTfulなスタイルへのインタフェースを提供書いたように、その後、慣性に従ってPythonの見つけたい、このような小さなサービスの利用者に通知するメッセージを送信するためにマイクロチャネルを呼び出す django
+の wechatpy
完了するために、一週間以内に事業の組み合わせを。シンプルな研究サークルでは、選択した gin
+ gorm
2つの大ツール。
サードパーティ製のライブラリを行く感じが非常に簡単である私を与えました。そのため、サードパーティのライブラリする方法のため go get -u github.com/gin-gonic/gin
、ダイレクトプルは最新のコードはGitHubのマスターブランチなので、コミュニティの全体感を分散し、サードパーティの合意に基づいており、我々は唯一のコミュニティの規範を遵守する必要があり、採掘コードは存在しません表示されます...(鉱業・コードの中心があるでしょうが)
ドキュメント、その後、実際にGitHubのREADMEは、GitHubには、多くの場合、サイトを訪問されている研究段階を読んで、各ライブラリのREADMEスタイルは、マークダウンスタイルも非常に読みやすいですもあります。本物見てGodocいくつかの場所。ソースコードのプルは、とても基本的に多くのPythonの経験のように、直接ソースコードを読んでいるので。
特定のビジネス・コードは特別まず、何をスキップしません。
配備します
私は楽しい話題が多いときに展開するための準備を始めました。マルチ環境の構成例のために行きます。
Pythonの私は、環境変数を使用しているマルチ環境の(ジャンゴ)+複数の設定ファイル、Goが、その後、コミュニティは、基本的な原理は似ているものを見に行きました。あなたも(たとえばYAMLなど)複数の設定ファイルを使用することができ、環境変数を使用することができ、他方は、コマンドパラメータ(フラグライブラリ)です。実際には、コード(実行ファイル)の統合を構成することができますので、より安全ガードをより助長、コミュニティフラグによって尊敬移動します。しかし、私は最終的には、環境変数+複数の設定ファイルを選択しました...
プロジェクト、我々はGitLab CI /ドッカーを使用する展開をコンパイルします。また、CI-ビルド/テスト/コンパイル/ドッキングウィンドウビルド/ 5段階ルーチンを展開します。独自のビルドを加速し、我々は加速速度を高めるために、適切なチャネルを取るためになるのGitHubとGoogleのコードは、プル速度は、国内で遅くなり、より多くの特別な引用されている公式があるでしょう移動します。今のところ、自動的にバージョンを送信するための枝にトランクからのコードは、おそらく3分以下で取りませんでした。
演奏
あなた自身の小さなサービスが上がる書く、我々は最初にQPSの友人についての測定WRKを見なければなりません。
パイソン(Djangoは)私たちは現在の時間を取得するために、サーバーに特別にシンプルなインターフェイスを介して調整されたgevent + uwsgiコルーチンモデルを使用して、基盤がQPS低をサポートし、実際にデフォルト同期モードで、マシン1CPU +の4Gメモリ内の小さな休憩、QPSのパイソン(gevent)は、1000年に10000に非チューニングゴー(GIN)QPSしばらくことができるであろう。あなたのために良い、ああ、行きます。
コミュニティ
私は本当に効果的な符号化時間が非常に長くはありませんが、実際には、週に遊びに行き、様々なコミュニティのベストプラクティスにうろつい時間のほとんどは行くのを文書化します。
私の目には、輝きのGo言語自体の多くを削除し、全体の言語コミュニティのオペレータゴーは、他の言語を学ぶ価値があります。例えば、上述の公式を効果的にすべてのプロジェクトの下限を向上させることができるツールチェーンを押してください。Pythonの昨年は、ちょうど持っていた フォーマットツールブラック なるように、自分の主張 妥協のないコードフォーマッタでは 。(Pythonは:学校で勉強し、急がないでください)
気持ち
そんなに一見中立、実際の音声を感じている話を、私は私の気持ちを総括注目します。
私は野菜をしています
私は、彼らが簡単な料理であることを感じることができたとき、ライトを移動します。一つは、私が単純化された構文の可能性を感じることができる場所がたくさんあるが、私の言語能力は、最適化されたボトルに達していません。たとえば、 チェックのキーワードで2案を行く 、私は漠然とベースかのように感じる panic + recover
同様のメカニズムを実現することができますが、実際に書いて、書きたいです。そして、私はLispで書かれた完全にPythonのを感じます。
他の一つは、ライブラリ、または使用することです「言語エコロジーを。」かかわらず、標準ライブラリの通常使用される、またはユニットテストで使用されるすべての三者のライブラリの種類、またはエンジニアリングのバックエンド業務用、ライブラリーの品質管理されて使用されたとき、私は唯一のフィールド調査を行うことができます。
なぜなら能力と相まって、基本的な知識の欠如、の一言で素晴らしい感覚「このことを理解していない、私は良い食べ物ああだ」のようなものが常にある書き込み処理を行って、十分ではありません。
私は行くが好き
料理は愛情を表現するから私を停止しなかった:)
それは私にはPythonよりも、シンプルな感じを与えるために、時間のさえたくさんだ、非常に昔ながらのKISSの原則を明らかにした人に行きます。たとえば、ベストプラクティスは、あなたを教えてくれます:「途中で分割していないファイルを実行し、問題は10個のファイルのディレクトリが成層を必要としない解決することができます。」
Pythonのに比べ、高速な実行速度が無理の種類を明らかにします。Pythonの深い理解の同時実行モデル、言語パラメータの結果、または移動と大きさの差のためにCPUをチューニングした後...(しかし、巨大な高速のPythonやの開発に...)
また、移動して、素敵な Gopherの ああ〜
練習を行きます
課私は、私は主にPythonが書かれたPythonでのメインのJavaテクノロジー・スタックのバックエンドです。
(の面で私の短い経験では、移動はキー高性能なサービス上で良好なパフォーマンスを持っていますが、新たなビジネスプロトタイプマルチサービスでは、ウェブ層は、Pythonは魔法の発展のスピードは他に類を見ないです丁拳銃)
人気の基本的な枠組みの現在の様々なの後端は、言語に依存しないで、私たちは、さまざまなビジネスアプリケーションシナリオに応じて適切なテクノロジー・スタックを選択することができます。
技術スタックの選択の企業は、実際には、そのような募集の開発の難しさなどの他の要因、コードライブラリ、統一されたテクノロジー・スタック、管理デカップリングの大規模なチームを考慮することがより現実的になります。実際には、これらは、非常に深いも探検する価値のトピックです。
週移動を書いた、私は彼らの哲学がより確信:非、刺すと殺す人は言う:エンジニアが人々の問題を解決することである」、技術は、言い使いにくいソフトウェアエンジニアリングツールをしていないという問題を解決するためのツールである彼Yiにあります私も、また兵士?」
フォロー
週の経験カード少し短すぎる、非常に多くの何かが言うために。
フォローアップの時間を、これらのトピックに行き、私が勉強していきますがあります。
- 生産ライン環境でのサービスは、位置を展開しました。
- 可視化サービスを移動します(監視、ログ記録、追跡)
- 言語より表現の基礎ライブラリを作るために黒魔術を使います
- クロスランゲージサービスの実践の間の相互作用