Go の上級文法に関する 10 の質問

1. Go 言語の for ループについて話しましょう

for ループは、ループを制御するための continue と Break をサポートしていますが、より高度な Break を提供し、どのループを中断するかを選択できます。for ループは、カンマで区切られた複数の代入ステートメントをサポートしていません。複数の初期化には並列代入を使用する必要があります。変数。
2. 関数パラメータとしての配列型の値
C/C++ では、配列 (名前) はポインタです。配列をパラメータとして関数に渡す場合、それは配列のメモリ アドレスへの参照を渡すことと同じであり、配列の値は関数内で変更されます。
Go では、配列は値です。関数にパラメータとして渡される場合、配列の元の値のコピーが渡されますが、このとき関数内で配列を更新することはできません。

2. 関数パラメータとしての配列型の値

C/C++ では、配列 (名前) はポインターです。配列をパラメータとして関数に渡す場合、それは配列のメモリ アドレスへの参照を渡すことと同じであり、配列の値は関数内で変更されます。
Go では、配列は値です。関数にパラメータとして渡される場合、配列の元の値のコピーが渡されますが、このとき関数内で配列を更新することはできません。

// 数组使用值拷贝传参
func main() {
    
    
 x := [3]int{
    
    1,2,3}

 func(arr [3]int) {
    
    
  arr[0] = 7
  fmt.Println(arr) // [7 2 3]
 }(x)
 fmt.Println(x)   // [1 2 3] // 并不是你以为的 [7 2 3]
}

配列を変更するには、ポインター型を配列に直接渡します。

// 传址会修改原数据
func main() {
    
    
 x := [3]int{
    
    1,2,3}

 func(arr *[3]int) {
    
    
  (*arr)[0] = 7 
  fmt.Println(arr) // &[7 2 3]
 }(&x)
 fmt.Println(x) // [7 2 3]
}

スライスを直接使用する場合: 関数内でスライスの値のコピーを取得しても、スライスの元のデータ (基になる配列) は更新されます。

// 错误示例
func main() {
    
    
 x := []string{
    
    "a", "b", "c"}
 for v := range x {
    
    
  fmt.Println(v) // 1 2 3
 }
}


// 正确示例
func main() {
    
    
 x := []string{
    
    "a", "b", "c"}
 for _, v := range x {
    
     // 使用 _ 丢弃索引
  fmt.Println(v)
 }
}

3. Go 言語の switch ステートメントについて話しましょう

1 つのケースで、複数の結果オプションが表示されることがあります。fallthrough キーワードがケースに明示的に追加された場合にのみ、次のケースの実行が続行されます。

4. Go 言語に隠された this ポインタがあるかどうかについて話しましょう。

メソッドによって適用されるオブジェクトは明示的に渡され、隠蔽されません。

Golang のオブジェクト指向の表現はより直感的で、プロセス指向の場合は、メソッドによって適用されるオブジェクトがポインタである必要も、これを呼び出す必要もないことを表現するために文法形式を変更するだけです。

5.Go言語の参照型とは何ですか?

スライス、ディクショナリ(マップ)、チャネル(チャネル)、インターフェイス(インターフェイス)。

6. Go言語の主な機能について話しましょう

main 関数はパラメータを取ることができず、main 関数は戻り値を定義できません。main 関数が配置されているパッケージはメイン パッケージである必要があります。main 関数でフラグ パッケージを使用すると、コマンド ライン パラメーターを取得および解析できます。

7. Go 言語が例外をトリガーするシナリオは何ですか?

Null ポインタの解決

添え字が範囲外です

約数は0です

パニック機能を呼び出す

8. Go言語のbeegoフレームワークについて話しましょう

Beego は、golang で実装された軽量の HTTP フレームワークです。

Beego は、アノテーション ルーティングや通常のルーティングなど、さまざまな方法で URL ルート インジェクションを完了できます。

bee new ツールを使用して空のプロジェクトを生成し、bee run コマンドを使用して自動的にホット コンパイルすることができます。

9. Go言語のgoconveyフレームワークについて話しましょう

goconvey は、golang をサポートする単体テスト フレームワークです。

goconvey は、ファイルの変更を自動的に監視してテストを開始し、テスト結果をリアルタイムで Web インターフェイスに出力できます。

goconvey は、テスト ケースの作成を簡素化するための豊富なアサーション セットを提供します。

10.GoStubの機能は何ですか?

GoStub はグローバル変数をスタブ化できます

GoStub は関数をスタブ化できます

GoStub はクラスのメンバー メソッドをスタブできません

GoStub は動的なスタブを作成できます。たとえば、関数をスタブ化した後、その関数を複数回呼び出すと、異なる動作が行われます。

おすすめ

転載: blog.csdn.net/m0_73728511/article/details/133501517