Hightlights of Golang Frequently Asked Questions (FAQ)

2653 ワード

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? OccamErlangは共に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? 安全性のために,同時に技術の発展は配列の下付きスケールの演算をポインタ算術と同様に効率的にした.ごみ回収器の実現を簡素化する.