ホームページ > バックエンド開発 > Golang > Go 言語変数にはいくつかのスコープがあります

Go 言語変数にはいくつかのスコープがあります

青灯夜游
リリース: 2023-01-16 11:10:44
オリジナル
1570 人が閲覧しました

Go 言語の変数には 2 つのスコープがあります: 1. ローカル変数、関数レベルとブロック レベルで宣言された変数です。ローカル変数はブロックまたは関数内でのみアクセスでき、宣言されたローカル変数は内部で再宣言できません。同じブロックまたは関数。 2. グローバル変数はパッケージ レベルで宣言された変数です。グローバル変数はプログラムのライフサイクル全体を通じて使用できますが、グローバル変数は「:=」演算子を使用して宣言することはできません。

Go 言語変数にはいくつかのスコープがあります

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

変数宣言の場所

Go 言語の変数宣言の場所には 3 つのレベルがあります:

  • パッケージ レベル:変数は関数の外で宣言されます
  • 関数レベル: 変数は関数のパラメーター変数を含めて関数の内部にありますが、コード ブロックの外で宣言されます
  • ブロック レベル: には 2 つのタイプがあります。これは、1 つは明示的に、中括弧 {} で囲まれたコードが使用されるもので、もう 1 つは暗黙的に (for または if の後の初期化式など) に使用されます。

#変数の場所の例

package main

import "fmt"

var test = "test"  //在函数外,包级别变量

func main() {
    a, b := 1, 2  //a和b,c在main函数内定义,函数级别变量
    c := sum(a, b)
    fmt.Println(c)
    fmt.Println(test)

    for i := 0; i < 10; i++ {   //i为for循环内定义,为隐式块级别变量
        var d = i + 1    //d在for的循环体内,以大括号{}括起来,为显式块级别变量
        fmt.Println(d)
    }

}

func sum(a, b int) int {   //函数参数a和b,在函数内定义,为函数级别变量
    fmt.Println(a)
    fmt.Println(b)
    nu := a + b
    return nu
}
ログイン後にコピー

変数のスコープ

変数宣言の場所によって、変数が何であるかが決まります。アクセスできる場所と変数の宣言期間。変数のアクセス可能な範囲を変数のスコープと呼びます。 Go 言語では、変数のスコープは次の 2 つのカテゴリに分類されます。

    ローカル変数 (ローカル変数とも呼ばれます)
  • グローバル変数

ローカル変数

関数レベルおよびブロック レベルで宣言された変数はローカル変数です。ローカル変数には次の特性があります。

    ローカル変数には、そのブロックまたは関数内でのみアクセスできます。
  • ローカル変数は、それが宣言されているブロックまたは関数の終わりまでのみ存続します。その後、それらはガベージ コレクターによって収集されます。
  • 宣言されたローカル変数を同じブロックまたは関数内で再宣言することはできません。
例:

package main

import "fmt"

func main() {
    var a= "astrng"
    fmt.Println(a)
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    fmt.Println(i)
}

func testLocal() {
    fmt.Println(a)
}
ログイン後にコピー

このコードはコンパイル時にエラーを報告します:

undefined: i
undefined: a
ログイン後にコピー

理由:

i: これはブロック レベルです。 for ループ本体 ローカル変数は、定義されている for ループの外でアクセスされると未定義と報告されます。

a: これは main 関数レベルのローカル変数であるため、testLocal 関数内ではアクセスできず、未定義のエラーが報告されます。

グローバル変数

パッケージ レベルで宣言された変数はグローバル変数です。グローバル変数には次の特徴があります。

    グローバル変数が小文字で始まる場合、そのグローバル変数は、それが定義されているパッケージ内でのみ使用できます。つまり、変数はパッケージ内で表示されます。
  • グローバル変数が大文字で始まる場合、このグローバル変数はさまざまなパッケージ間で使用できます。つまり、変数はどこにでも表示されます。
  • グローバル変数は、プログラムのライフサイクル全体を通じて使用できます。
  • グローバル変数は、
  • := 演算子を使用して宣言できません。
  • package main
    
    import "fmt"
    
    var a = "astring"
    
    func main() {
        testGlobal()
    }
    
    func testGlobal() {
        fmt.Println(a)  //运行结果是,正确打印出a的值“astring”
    }
    ログイン後にコピー

ローカル変数とグローバル変数は同じ名前です

Go 言語プログラムのグローバル変数とローカル変数は同じ名前を持つことができますが、ローカル変数は関数本体が優先して考慮されます。

package main
import "fmt"
//声明全局变量
var a float32 = 3.14
func main() {
    //声明局部变量
    var a int = 3
    fmt.Printf("a = %d\n", a)
}
ログイン後にコピー

実行結果は次のとおりです:

a = 3
ログイン後にコピー

Go 言語はローカル変数と同名のグローバル変数を実行します。同名の変数はローカル スコープ内にあり、カバーされます。外部スコープ内の変数。

package main

import "fmt"

var a = "globala"

func main() {
    var a = "locala"
    fmt.Println(a)  //此处的a会遮蔽外面定义的a全局变量,输出locala
}
func testGlobal() {
  fmt.Println(a)  //此处是全局变量a,输出globala
}
ログイン後にコピー

Go 言語変数にはいくつかのスコープがあります

[関連する推奨事項:

Go ビデオ チュートリアル プログラミング教育 ]

以上がGo 言語変数にはいくつかのスコープがありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート