Golangプログラミング言語の仕様
I.説明
- 仕様のプログラミング、および言語の罠を避けることができ、それが有利なチームワーク、有利なプロジェクトの保守かもしれません。
- 通常のプログラミング仕様を行く、二つがあります(必要な)コンパイラの力は、(非必須)非必須フォーマットをgofmt。
- サポートこぶ命名法、下線付きの排他メソッドを宣言移動します。
- カスタムの原則:
任意のディレクトリとファイル名を避けるために。統一されたワークスペース、
B。正準変量/構造/メソッドの名前とインターフェース
C。仕様メモ
D。テストユニット/プログラム効率の推奨
二つのレベル:(S)勧告、(M)でなければなりません。以下は詳細です。
II。組織コード
- (M)ディレクトリは、一つのパケット、分割モジュールサブモジュール錯体/サブディレクトリが含まれています
- (S)の作業ディレクトリ場合は、複数の社内プロジェクトGOPATHを指します。最初のプロジェクトは、ワークスペースを開くために(すなわち、最初のデフォルトのダウンロードディレクトリに取りに行きます)
- (M)非テストファイル(* _test.go)は、パッケージを簡素化するために、使用を禁止します
- (M)は、相対パスを阻害パッケージに導入しました
- (S)またはIDE管理勧告輸入goimports
- (S)担当者は、アイテムが、ベンダーのすべてのコードの依存関係が含まれている必要があります
- (S)はGolide、Godepは、サードパーティ製のパッケージを管理推奨しました
要するに:組織構造は、作業複数のセクションを可能にするため、一目で、簡略化される必要があるが、最初の作業部は、好ましくは、他の依存godepとワークスペースを使用することが好ましい環境変数項目ではなく、相対経路設定パケット、オープンでなければなりません依存関係を管理するためのライブラリ管理ツール、各プロジェクトのすべての依存関係は、最高のカタログベンダーに置きます。
III。コーディングスタイル
- gofmt書式設定コード、(自動的にデフォルトはIDEで使用される2つのツール)コードを提出したときにコード(M)をチェックgolint
- (S)JSON文字列推奨使用単一引用符(「)
- (M)ファイル名は小文字、許可アンダースコア「_」ではなく、頭と尾でなければなりません。_Test.goまたは競合を回避し、他のシステム関連_386.go
- ガイドファイル名として機能する(S)、モジュール名が表示されている必要はありません。
- 「 - 」ではなく、頭と尾(M)ディレクトリ名には下線が引かが可能、小文字でなければなりません
- (S)推奨されていないディレクトリ名がアンダー表示されます「_」
- 複数の単語を接続することにより、禁止(M)パッケージ名はできるだけ短く、すべて小文字、無下線でなければならず、名前と標準ライブラリを複製しないようにしてくださいは、下線
- 限り、パッケージ名のディレクトリ名と一致し、可能な限り(S)
- (M)関数名と構造の名前は、好ましくは、スクライブなどの特殊文字なし、ケースハンプモードでなければなりません
- (S)関数名候補動詞や単語の動詞オブジェクト構造、構造が名詞か動名詞をお勧めします
- (S)の定数と列挙名は、こぶの判例法は、アンダースコア、サードパーティ製のパッケージの例外を許可していません。
- (M)小文字関数パラメータはハンプ方法の大きさに応じて、下線付きことができない最初の文字
- (S)関数のパラメータは、配置位置の気密性に応じて、パラメータの同じタイプは、隣接でなければなりません
- (S)パラメータを超えない5
- (M)は、変数名、判例法のこぶ、ローカル変数、最初の文字を小文字、グローバル変数の大文字の最初の文字をアンダースコア許可していません
- (S)は、多くの場合、一文字サイクルのため、グローバル変数を回避するために使用されてもよいです
- (M)インタフェース名の判例法のこぶは、最初の文字を大文字、名詞を強調することはできません
- ER '' 末端(S)インタフェース名
- (M)の複雑なコメントメモを書くために彼のような機能、注釈式ロングったらしい、明確ではないことにします。注標準一旦、そのようなパッケージのコメント/ * /、イニシャル、コメントの後にブランク行、上記の機能および他の機能に書き込まれたコメントの使用、好ましくはgodoc参照を、強制。
すべてのすべてで、ファイル名とディレクトリ名は、パッケージ名は小文字でなければなりません。そして、データやパラメータの他のタイプは、下線付きや下線付きを使用していない、変数キャメルケース方式が好ましく用いられる定義します
IV。テストユニット/プログラムの効率
- (S)より少ないテストするためにメインメソッドの使用が、試験を行う_test.goの使用を推奨
- 同様の他の言語、IFまたは埋め込まれた使用のためのステップを回避する、単純なコードに必要なレベル、約少ない脳レベルを有する(M)
- (M)という名前の吸盤は、if(!IsTrue)、などIsTrue変数を避けます。
- (M)非効率的な使用を避け、囲碁言語のさまざまな機能をよく理解してください。少なくとも一度お読みください。
yum -y install docker-io
# 拉镜像
docker pull hunterhug/gotourzh
# 前台运行
docker run -it -p 9999:9999 hunterhug/gotourzh
# 后台运行(类似nohup)
docker run -d -p 9999:9999 hunterhug/gotourzh
打开http://127.0.0.1:9999即可!
V.いくつかの例
package main
import "fmt"
func main() {
buffedChan := make(chan int, 2)
buffedChan <- 2
buffedChan <- 3
close(buffedChan) // 关闭后才能for打印出,否则死锁
//close(buffedChan) // 不能重复关闭
//buffedChan <- 4 // 关闭后就不能再送数据了,但是之前的数据还在
for i := range buffedChan { // 必须关闭,否则死锁
fmt.Println(i)
}
buffedChan1 := make(chan int, 2)
buffedChan1 <- 2
buffedChan1 <- 3
j, ok := <-buffedChan1
fmt.Println(j, ok)
j, ok = <-buffedChan1
fmt.Println(j, ok)
close(buffedChan1) // 关闭后才能,否则死锁
j, ok = <-buffedChan1 // 如果未关闭,否则堵塞后死锁
fmt.Println(j, ok)
select {
case j, ok := <-buffedChan1:
fmt.Println("jjj", j, ok)
default:
fmt.Println("will not out")
}
}