こんにちは、Habr!かなり頻繁に、Habrを見ることから朝を始め、最終的に興味深いことを学ぶこのプロセスに貢献することを決めました。 すべてがうまくいけば、実稼働システムで
GO言語を使用するサイクルの最初の記事になります。 アプリケーションとサーバーを作成する際の微妙さ、言語の利便性、およびその開発の速度についてお話したいと思います。 おそらく専門家にとっては、この記事は退屈で面白くないように思えるかもしれませんが、文献を読んでも、生産上の問題を解決する一般的な状況は見つかりませんでした。 ほとんどのタスクは同じ方法で解決されますが。 この記事では、サーバー構築の一般原則について説明します。また、例として、サーバーを使用して、ロシア郵便の郵便番号を検証および表示します。 この記事では、このシステムを作成するときに遭遇した、より一般的で方法論的な問題と微妙な点について説明します。 一般的な設定については説明しませんが、ネットワーク上にはこれらの多くがあります。プロジェクトの立ち上げを妨げた小さなことだけに焦点を当てたいと思います。

参加する代わりに
Habrを読んで、私はしばしば検証のタスクに遭遇しました-情報のユーザー入力の正確さをチェックします。 各著者は独自の方法でこの問題を解決しました。 外部サービスを使用したか、サーバーを作成しました。 この問題の別の解決策として、ディレクトリサービスの作成を提案します。 ディレクトリは、特定の方向の情報を含むサーバーであり、個別の独立したサブシステムに区別できます。 通常、ディレクトリは、ユーザーの入力を支援し、入力された情報を検証するために使用されます。 このようなディレクトリの例として、地域のリクエスト、都市のリクエスト、KLADR、郵便番号、GAISディレクトリ(州の自動化された情報システム)のサービスを挙げることができます。 ほとんどすべての既存のシステムは、jsonまたはsoapを使用してRESTデータを交換します。 そのようなディレクトリを開発するためのテンプレートを教えてみます。これにより、そのようなシステムがすばやく作成されます。 内部プロジェクトのソースをgithubに配置します。
システムの選択。 なぜGOなのかという疑問がすぐに生じます。 なぜLinuxなのか? そして、どのLinux?
それでは、順番に始めましょう。 現在のシステムは、1Cの製品、つまりBUSと企業ポータルに基づいています。 OSを統合するために、推奨される1Cインストール、つまりLinux OS CentOSから選択しました。 1C Web環境を起動するスクリプトは、このOSで実行されます。 Windows OSは考慮されませんでした。 選択が好きだとは言えません。debianを選択しますが、それは起こりました。 歴史的には大きなOS動物園、OS Linuxのさまざまなビルド、OS FreeBSD、OS VxWorksがあるため、統一が必要でした。 そして、私の意見では、最速のLinux CRUX OSです。
多くのプロジェクトと同様に、1Cで作成されたシステムは大きなポータルに成長し、システムを分離したり、さまざまなサービスでシステムを補完したりすることが必要になりました。 すでに作成されたサービスのオファーと機能、およびこれらのディレクトリのニーズを分析すると、ディレクトリは次のように結論付けられました。
- 自律サーバーサービス。
- データ交換はRESTで行われます。
- 水平方向に拡大縮小する機能があります。
- 冗長ではあるが、1C製品の処理を迅速に行う必要があります。
- 新しいビジネスの課題に基づいてロジックをすばやく再構築します。
上記の基準とその入力の容易さに従って、Goは参考書を書くために選ばれました。 オプション:
- Goはコンパイラを備えた言語であり、Cコードのスニペットを含めることができます。
- プログラムは、すべてのライブラリを含む単一のファイルです(アセンブリ後のライブラリの互換性に問題はありません)。
- 大規模なコミュニティ(多くの例とターンキーソリューション)。
つまり、Goはディレクトリの作成に適しています。 私が付け加えると、phpとGoは少し似ているので、これらの言語で書かれたシステムをサポートできます。 Goには、タスク用のこれらのソリューション、つまりデザイナーのキューブから家のモデルを組み立てる方法をすばやく組み立てることができる多数のソリューションも既にあります。 それでは、練習に移りましょう。
行く ライブラリまたはソリューションのインストールと検索
インストールするには、
ダウンロードページからアーカイブをダウンロードし、インストールフォルダーに解凍する必要があります
。/usr / localを使用します。
wget https://dl.google.com/go/go1.12.1.linux-amd64.tar.gz tar -C /usr/local -xvzf go1.12.1.linux-amd64.tar.gz
注目したいのですが、Goは2つのカテゴリに分かれています.1つ目はコンパイル言語自体とアセンブリに含まれるライブラリ(
GOROOT )、2つ目はインストールした追加のライブラリとプロジェクトを作成する場所(
GOPATH )です。 環境をセットアップして開発フォルダーを準備するには、
/ home / gouser /を使用します。
/ etc / profileまたはカスタム
.profileに追加します。
export GOPATH=/home/gouser export GOROOT= /user/local/go/ export PATH=$PATH:/usr/local/go/bin
プロジェクト用のフォルダーの準備:
mkdir -p /home/gouser/{bin,pkg,src}
さらに、プロジェクトではすべてが簡単で、srcにフォルダーを作成し、go拡張子を持つファイルを作成して、プロジェクトをコンパイルします。
go build
プロジェクトを作成するための推奨事項。 一般的な推奨事項
- githubプロジェクトの場合、src / github.comプロジェクト/ <プロジェクト名>のフォルダーを作成する方が簡単です。
- プロジェクトをパッケージとして設計し、各手順にコメントを付けると、godocで既製のプログラムドキュメントを非常に便利に入手できます。
- 別のモジュールでグローバル変数を取り出し、必要に応じて接続します(テンプレートのみに似ています)。
ビルド済みのサンプルとライブラリの両方が
libs.gardenにあります。 見つかったサンプルのインストール
go get < > , github.com/labstack/echo
Goをインストールしたら、サンプルに移りましょう。 次のコマンドを使用して、コンパイル用にダウンロードしてインストールできます。
go get github.com/julienschmidt/httprouter go get github.com/LindsayBradford/go-dbf/godbf go get github.com/go-sql-driver/mysql go get github.com/julienschmidt/httprouter cd /home/gouser/go/src/github.com/ git clone https://github.com/Theo730/postcode.git postcode
問題の声明
Russian Postの郵便番号を操作するためのディレクトリを作成する必要があります。これにより、次の問題が解決されます。
- 郵便番号の検証。
- すべての会計オブジェクト(地域、都市など)のリストを取得する機能。
- 都市、地域、地域の会計オブジェクトのすべてのインデックスを取得しています...
- 上記から、JSONの形式でRESTを介してデータを交換します。
タスク研究
最初にデータベースを初期化してから、このデータベースへの要求サーバーを作成する必要があります。 郵便番号データベースが必要です。 検索は
vinfo.russianpost.ru/database/ops.htmlです。 FoxProおよびzipアーカイブのベース。 次のアカウンティングオブジェクトがデータベースにあります。
libs.gardenの初期化のために、データベースとzipを操作するコンポーネントと例があります。 要求
ルーターとして
httprouterを使用し
ます 。 プロジェクトに接続します。
データベースファイルを調べると、
すべてのアカウンティングオブジェクトが指定されている
わけではないことがわかりました。つまり、サンプルにゼロ値が存在します。
ソリューションと実装
データベースが初期化されるときに階層にアカウンティングオブジェクトを設定します。アカウンティングオブジェクトがゼロの場合、名前は親から取得されます。 サーバーのイデオロギー-要求は
メイン (ここでは要求ルーター)に
送られ、
ハンドラー (ここではすべてのデータチェック、変換など)にリダイレクトされ
ます 。
ハンドラーから
データベースおよび計算へのすべてのクエリが実行され、ハンドラーは受信した情報の引き出しを実行します。 このような
分解により、データベース内のクエリ、計算、入力された情報の検証、見つかった出力を分離できます。 原則として、すべて。
合計ではなく
機能参照は
KLADRよりも複雑であることが判明しました。 サイト上に検証ツールまたはディレクトリを作成できるだけでなく、地域ビジネス向けのアルゴリズムも作成できます。
サービスや商品を販売する分散地域ビジネスがある場合。 地域のディーラーはポータルに登録されており、サービスを提供したり商品を販売したりする地域を示しており、郵便番号の配列が割り当てられています。 サービスまたは製品を要求すると、クライアントは郵便番号を示し、彼のアプリケーションは地域のディーラーに送信されます(ここで複雑なアルゴリズムを作成できます)。
RESTドキュメントのリストは、プロジェクトドキュメントの
githubにあります。
そして少しのビトリックス
この参照は任意のプロジェクトまたはフレームワークに接続できますが、bitrixがあるため、標準コンポーネントのWebフォームにバリデーターを追加するモジュールを配置します。
PSサーバーのインストールは、特に3つの段階に分けられます。 これは、vinfo.russianpost.ruサイトからのデータベースの陳腐化とライセンス制限のために行われます。 データベース自体は私の所有物ではなく、それを使用して、発表されたサイトの上のライセンスポリシーに同意します。
私のプロジェクトで企業セグメント用に作成された
PSSサーバーは、条件下ではオンラインになりません。 コードは特定のタスクに合わせて変更できます。 プロジェクトには外部アクセスを使用しません。 以下で説明するプロジェクトは、本格的なCLADRとストリーム無線プロトコルアナライザーです。 次の行はBitrix24 +アスタリスクです。 誰がより興味深いかについてコメントしてください。