ホームページ >よくある問題 >Go言語には静的グローバル変数はありますか?

Go言語には静的グローバル変数はありますか?

百草
百草オリジナル
2023-07-11 15:37:361798ブラウズ

Go 言語には静的グローバル変数がありません。より柔軟な方法を使用してグローバル変数の必要性を処理します。グローバル変数は通常、パッケージ レベルで宣言されます。つまり、関数の外部で宣言された変数です。これらの変数は、パッケージ レベルで宣言されます。グローバル変数はパッケージ全体で表示され、パッケージ内の任意の関数で使用できます。

Go言語には静的グローバル変数はありますか?

この記事の動作環境: Windows 10 システム、go1.20 バージョン、DELL G3 コンピューター。

Go 言語には静的なグローバル変数がありません。より柔軟な方法を使用してグローバル変数のニーズに対応します。 Go 言語では、グローバル変数は通常、パッケージ レベルで宣言されます。つまり、関数の外で宣言された変数です。これらのグローバル変数はパッケージ全体で表示され、パッケージ内の任意の関数で使用できます。

ただし、Go 言語はカプセル化と保守性を重視しており、グローバル変数の使用を推奨しません。代わりに、Go 言語では、ローカル変数と関数パラメーターを使用してデータを渡すことが推奨されています。このアプローチは、コードの編成とテストにさらに役立ち、複数のコルーチン間でデータを共有することで発生する可能性のある同時実行性の問題を回避できます。

プログラム全体でグローバル状態を使用する必要がある場合、Go 言語はそれを実現するための非常に簡潔な方法を提供します。パッケージ レベルで変数を定義し、それをパッケージ レベルの関数のローカル変数として使用できます。このように、変数は関数が呼び出されるたびに初期化されますが、その状態は変化しません。変数は関数のスコープに制限されているため、他の関数は変数に直接アクセスできず、静的グローバル変数と同様の効果が得られます。

Go 言語には静的変数はありませんが、設定情報など、実際のプロセスでは同様の効果が必要になることがよくあります。次の書き込みメソッドは、静的変数と同様の効果を実現するために、例としてユーザー名 (username) の読み取りと書き込みを使用します。

まずは main.go の呼び出しの書き方を見てみましょう:

//在main函数中set好username的值,然后在其他函数中获取username的值
//main函数中进行set操作
func main() {
config.WithConfig().SetConfig()
initApp()
}
//该方法进行get操作
func initApp(){
config.WithConfig().GetConfig()
}

次に config.go の書き方を見てみましょう:

package config
//配置结构体
type Config struct {
username string
}
//关键在此,声明一个全局变量所有的读写操作实际上都是在操作c
var c *Config
func init() {
c = new(Config)
}
//方便链式操作
func WithConfig() *Config {
return c.WithConfig()
}
func (c *Config) WithConfig() *Config {
return c
}
//写
func (c *Config) SetConfig(name string) {
c.username = name
}
//读
func (c *Config) GetConfig() string {
return c.username
}

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。