Origins
What is the purpose of the project? コンパイルが速く、依存関係分析が簡単で、軽量レベル(非継承)のタイプシステム、ゴミ回収、同時実行と通信、マルチコアプラットフォームのシステムレベルソフトウェア Why are you creating a new language? 高速コンパイル、高速実行、書きやすい3つは同時に満足できません. What are the guiding principles in the design? 直交性の維持:任意のタイプのメソッド、構造体がデータを表し、インタフェースが抽象を表すなどを定義できます. Usage
Design
Why does Go not have generic types? 現在、良い実現メカニズムはなく、非常に必要ではなく、問題を保留しています. Why does Go not have exceptions? 異常処理は、マルチリターン値とpanic and recover
メカニズムを用いて実現される. Why build concurrency on the ideas of CSP? Occam
とErlang
は共にCSP
理論を適用し,Golang
の主な寄与は明示的に定義されたチャネルを提案することである. Types
How do I get dynamic dispatch of methods? インタフェースを使用します. How can I guarantee my type satisfies an interface? 割り当て操作により
type T struct{}
var _ I = T{} // Verify that T implements I.
インタフェースを実装したことをインタフェースのユーザーに明確に宣言する場合は、インタフェースに記述的な名前を追加できます.たとえば、
type Fooer interface {
Foo()
ImplementsFooer()
}
Why doesn't type T satisfy the Equal interface? Go
のタイプシステムは、タイプを自動的にアップグレードしません. Can I convert a []T to an []interface{}? 直接変換することはできません.要素ごとに変換する必要があります. Why is my nil error value not equal to nil? Interface
の下層構造は、2つの要素、type
およびvalue
を含む. Values
Why don't maps allow slices as keys? スライスの等化を実現するには,深さの比較,ポインタや値の比較,再帰型などを考慮する必要があり,現在は明確な考えはない. Why are maps, slices, and channels references while arrays are values? よくわかりません
Writing Code
Pointers and Allocation
When are function parameters passed by value? C
ファミリーのすべての言語と同様に、Go
に値で渡されます. Should I define methods on values or pointers? receiver
を関数のパラメータとし、値またはポインタによって伝達される規則に従って考慮する. Concurrency
Functions and Methods
What happens with closures running as goroutines? go vet
でコードをチェックします. Control flow
Packages and Testing
How do I write a unit test? _test.go
からpackage
ディレクトリに追加し、testing
パッケージをインポートし、いくつかのテスト関数を実装します. Implementation
Performance
Why does Go perform badly on benchmark X? Golang
の多くのライブラリは、まだ最適化されていません. Changes from C
Why is there no pointer arithmetic? 安全性のために,同時に技術の発展は配列の下付きスケールの演算をポインタ算術と同様に効率的にした.ごみ回収器の実現を簡素化する.