golang はクロスプラットフォームをサポートしていますか?
golang はクロスプラットフォームをサポートしています。そのモジュール設計とモジュール性、つまりコードがコンパイルされ、可能な限り最小のバイナリ形式に変換されるため、golang は依存関係を必要としません。そのコードはあらゆるプラットフォームでコンパイルでき、あらゆるサーバーおよびアプリケーションで使用できます。さらに、Go 言語には独自のリンカーがあり、システムが提供するコンパイラーやリンカーに依存しないため、コンパイルされたバイナリ実行可能ファイルはほぼすべてのシステム環境で実行できます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
golang はクロスプラットフォームをサポートしています。
#golang の特徴の 1 つは、プラットフォームに依存しないこと (クロスプラットフォーム コンパイル) です。
Go 言語は、Java 言語と同様に、プラットフォームの独立性をサポートします。そのモジュール設計とモジュール性により、つまりコードはコンパイルされ、可能な限り最小のバイナリ形式に変換されるため、依存関係は必要ありません。そのコードは、あらゆるプラットフォーム、あらゆるサーバー、アプリケーション上でコンパイルされます。
仮想マシンを使用する必要はなく、Go 言語コードをバイナリ実行可能ファイルとして直接出力できます。さらに、Go 言語には独自のリンカーがあり、システムが提供するコンパイラーやリンカーに依存しません。したがって、コンパイルされたバイナリ実行可能ファイルは、ほぼすべてのシステム環境で実行できます。
Golang は、C/C と同様、プラットフォーム関連のバイナリ ファイルにコンパイルされるため、golang で開発する場合は、クロスプラットフォーム サポートの問題も考慮する必要があります。この記事では、golang がクロスプラットフォームの問題をどのように解決するかを簡単にまとめます。
GOOS と GOARCH
まず、ランタイム パッケージの golang によって定義される 2 つのランタイム変数を理解する必要があります。
runtime.GOOS
##runtime.GOARCH
// GOOS is the running program's operating system target: // one of darwin, freebsd, linux, and so on. const GOOS string = sys.GOOS // GOARCH is the running program's architecture target: // one of 386, amd64, arm, s390x, and so on. const GOARCH string = sys.GOARCH
package main import ( "fmt" "runtime" ) func main() { fmt.Printf("OS: %s, ARCH: %s\n", runtime.GOOS, runtime.GOARCH) }
クロスコンパイル問題
golangプログラムのコンパイルは、非常に簡単です。コンパイル オプションを考慮せずに go build を使用するだけです。たとえば、次のコマンドは、現在のディレクトリに "helloworld" という名前のバイナリ ファイルを生成します:go build helloworld.go
$ GOOS=darwin GOARCH=amd64 go build helloworld.go
パッケージを複数のプラットフォームにサポートさせるには?
golang を使用して他の人が使用できるパッケージを開発してみませんか。では、パッケージを複数のプラットフォームにサポートするにはどうすればよいですか?実際、golang の標準ライブラリは基礎的な詳細を保護しているため、通常、開発者は一般的なアプリケーションを開発するときにこの問題を考慮する必要はありません。バイナリ バージョンをリリースしたい場合は、上記のクロスコンパイルを通じて複数のプラットフォームをサポートするバージョンをリリースするだけです。開発する golang プログラムが比較的低レベルのシステム コールを使用しており (もちろん、これは通常は推奨されません)、プラットフォームごとにシステム コールが異なる場合は、複数のシステム コールをサポートすることを検討する必要があります。プラットフォームの問題。プログラム内で runtime.GOOS および runtime.GOARCH の値を動的に決定し、if-else if または switch case ステートメントを使用してそれを処理することもできますが、これはメンテナンスに役立たず、メンテナンスに役立たないため、望ましい方法ではありません。コードが見苦しくなります。 推奨されるアプローチは、異なるプラットフォームの実装を異なるファイルに配置し、各ファイルがどのプラットフォームに対応するかを golang コンパイラーに指示することです。方法は 2 つあり、1 つ目はファイル名で指定する方法で、ファイル名のパターンは次のとおりです:
*_[GOOS]_[GOARCH].go
yourfile_darwin.go yourfile_linux.go yourfile_windows.go
另外一种办法是通过一个特殊的注释。例如,假设你想使yourfile.go只在linux平台时才会编译,那么在文件头加上"+build linux"即可:
// +build linux ......
这里一定要注意,"+build linux"必须在所有代码的前面,但这条注释之前可以有空行或其它注释。它之后必须有一个空行。
这种通过注释的方式和通过文件名标示的方式作用相同,但是文件名的方式只能支持一个平台,而注释的方式可以标示一个文件同时支持多个平台,例如下面的注释标示该文件同时支持freebsd, openbsd和netbsd这三个平台:
// +build freebsd openbsd netbsd
注意多个平台之间用空格隔开时表示"或"的关系,如果用逗号隔开则表示"与"的关系,例如下面的注释表示 (linux AND 386) OR darwin:
// +build linux,386 darwin
这里只是介绍了最基本的使用场景,实际使用中,应该充分发挥软件设计的各种思想灵活使用。例如虽然针对不同的平台有不同的实现,但给上层客户端应用程序提供API应该统一。
以上がgolang はクロスプラットフォームをサポートしていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

マルチプロセスのログライティングの並行性セキュリティの問題を効率的に処理します。複数のプロセスが同じログファイルを同時に書き込みます。並行性が安全で効率的であることを確認する方法は?これは...

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

ポインター構文とviperライブラリの使用における問題への取り組みGO言語でプログラミングするとき、特にポインターの構文と使用を理解することが重要です...

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

VSCODEユーザーのGolang Generic Function Typeの制約の自動削除は、VSCODEを使用してGolangコードを書くときに奇妙な問題に遭遇する可能性があります。いつ...
