目次
パッケージの紹介
ホームページ バックエンド開発 Golang Go 言語がコードをパッケージにまとめるのはなぜですか?

Go 言語がコードをパッケージにまとめるのはなぜですか?

Jan 05, 2023 am 10:16 AM
golang 言語を移動

理由: プログラムのすべてのコードを 1 つのソース コード ファイルにまとめるのは無理があり、関連するコードは別のファイルで管理する必要がありますが、プログラム ファイルの数が増えると、何らかの方法が必要になります。ファイルを整理して管理するための./フォーム そこで、Go では「パッケージ」という概念が導入されました。パッケージとは、プログラムの機能・属性を「分散管理」し、「統一的に利用」するための論理的な組織形態です。

Go 言語がコードをパッケージにまとめるのはなぜですか?

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

パッケージの紹介

go 言語を使用して開発したプログラム ファイルは、ソース コード ファイルと呼ばれます (ソース コード ファイルは .go で終わる必要があります)。もちろん、プログラムのすべてのコードを 1 つのソース コード ファイルにまとめるのは無理があり、関連するコードは別のファイルで管理する必要がありますが、プログラム ファイルが増加するにつれて、整理して管理する方法/形式が必要になります。ファイルを作成するため、Go が導入した「パッケージ」の概念を理解します。

パッケージは Go 言語によって提供される仮想概念であり、一貫したパッケージ宣言を持つ複数のソース コード ファイルは論理的にまとめられ、同じパッケージに属します。

Go 言語パッケージは、ディレクトリ ツリーの編成形式を使用します。一般に、パッケージの名前は、そのソース ファイルが配置されているディレクトリの名前です。ただし、Go 言語では、パッケージ名は、それが配置されているディレクトリ名と同じ名前である必要がありますが、構造をより明確にするために、パッケージ名はそれが配置されているディレクトリと同じ名前にすることをお勧めします。

パッケージは非常に深いディレクトリに定義できます。パッケージ名の定義にはディレクトリ パスは含まれませんが、パッケージを参照する場合は通常、フル パスが使用されます。たとえば、GOPATH/src/a/b/ にパッケージ c を定義します。パッケージcのソースコードでは、パッケージa/b/cではなくパッケージcとして宣言するだけですが、パッケージcをインポートする際にはimport "a/b/c"のようにパスを持ってくる必要があります。 。

パッケージの慣用的な使用法:

  • パッケージ名は通常小文字で、短くて意味のある名前を使用します。

  • パッケージ名は通常、パッケージが配置されているディレクトリと同じ名前ですが、異なる名前にすることもできます。パッケージ名には、- などの特殊記号を含めることはできません。

  • パッケージは通常、ドメイン名をディレクトリ名として使用するため、パッケージ名の一意性が確保されます。たとえば、GitHub プロジェクトのパッケージは通常、GOPATH/src/github に配置されます。 .com/userName/projectName ディレクトリ。ダウン。

  • main という名前のパッケージはアプリケーションのエントリ パッケージです。メイン パッケージが含まれていないソース コード ファイルをコンパイルすると、実行可能ファイルは取得されません。

  • フォルダー内のすべてのソース コード ファイルは、同じパッケージにのみ属することができます。同じパッケージに属するソース コード ファイルを複数のフォルダーに配置することはできません。

# (1) パッケージの宣言、パッケージのインポート パス、注意事項 #

//一:包的声明
// 1、每个源码文件都必须在文件头处声明自己归属的包。
package 包名 // 包名一般总是用小写字母

// 2、包名任意,包名一致的属于同一个包

// 3、包是编译和归档Go程序的最基本单位,一个包中的多个源码文件是一个不可分割的整体

//二:包的导入路径
强调强调强调!!!!!!
包是一个把多个源码文件归一到一起管理的虚拟单位,一定要记住,它只是一个虚拟的概念而已,而实实在在地讲,多个源码文件是要放置到一个实实在在的文件夹下的,这个实实在在的文件夹所处的路径是包的导入路径。包的导入路径很重要,他是包的"家庭住址",是用来找到包的(用在import语句中,稍后介绍),但它绝不等同于包的概念

//三:注意的问题
1、一个文件夹下只能放置一个包,也就是所一个文件夹下放置的多个源码文件的包声明必须一致,go以此来确保一个路径就唯一定位到唯一的一个包。
2、包虽然与文件夹路径是截然不同的意思,但是为了方便记忆,包通常应该声明为文件夹的名字
例如文件夹路径/a/b/c/mypkg,包名应声明为package mypkg,mypkg就为包名
ログイン後にコピー

Go 言語がコードをパッケージにまとめるのはなぜですか?

(2) パッケージの区別と配置

パッケージは仮想的かつ論理的な概念ですが、パッケージによって構成された複数のソース コード ファイルは実際に存在するため、パッケージを配置する必要があります。特定のフォルダー。

注意:以降の記述を簡単にするため、作成者はパッケージごとに整理された複数のソース コード ファイルの保存場所をパッケージの保存場所として直接参照します。これは承知しております。

メイン パッケージにはプログラムのエントリ ポイントが含まれており、主にプログラムを実行するために使用されます。いずれの場合も、メイン パッケージは任意のフォルダーに配置できます。

作者は、メイン パッケージ以外のパッケージを他のパッケージと呼び、特に組み込みパッケージ、カスタム パッケージ、およびダウンロードされたサードパーティ パッケージを指します。その他のパッケージは本体パッケージとは異なり、主にインポートして使用するもので、配置場所は以下のとおりです

// 内置包
内置包固定被放置在`$GOROOT/src/`下,与任何模式无关

// 自定义包
在未启用modules模式的情况下,自定义包需要放置在GOPATH指定的任意目录下的src中

// 下载的第三方包
在未启用modules模式的情况下,使用go工具链命令下载的第三方包总是默认被存放到GOPATH的第一个目录的src下 


// 强调一下
在早期的Go环境中,自定义的包与下载的第三方包都是放到了$GOPATH/src下,因为早期Go采用的是和GOPATH模式,而且即便是在GO1.14.2版本中,在我们还未学习如何使用任何新模式前,默认使用的仍是GOPATH模式
ログイン後にコピー

ps:

1 組み込みパッケージは作者の愛称です標準パッケージの場合

2. GOPATH ワークスペースに格納されるパッケージは正式にはワークスペース パッケージ


(3) パッケージの使用方法

// 1、一个源码文件中声明的函数、类型、变量和常量等标识符/名字对同一包中的所有其他源码文件都可见,不需要加任何前缀即可引用,因为代码包只是一种组织管理源码文件的形式,同一个包下的多个源码文件本就属于一个整体,事实上我们完全可以将一个包当成一个”大文件“去看,毫无疑问这个”大文件“中声明的标识符/名字不能重名

// 2、包名很关键
名为main的包可简称为”main包“,是程序的入口,go程序运行时会查找main包下的main函数,main函数既没有参数声明也没有结果声明,见下图

名不为main的包可称之为”其他包“,是程序的功能/属性集合,此类包用来被其他包导入使用,为何此时包名仍然很关键呢?因为我们导入时用的是导入路径(指的是包所在的路径,该路径不是绝对路径,稍后介绍),但是使用的则可能会使用"包名.xxx"
ログイン後にコピー

Go 言語がコードをパッケージにまとめるのはなぜですか?

要約: パッケージは、プログラムの機能/属性の「分散管理」と「統合使用」のための論理的な組織形式です。

[関連する推奨事項:

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

以上がGo 言語がコードをパッケージにまとめるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

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

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

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

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

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

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

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

マルチプロセスログを作成するときに、同時性が安全で効率的であることを確認する方法は? マルチプロセスログを作成するときに、同時性が安全で効率的であることを確認する方法は? Apr 02, 2025 pm 03:51 PM

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

See all articles