>  기사  >  백엔드 개발  >  Go 언어의 패키지란 무엇인가요?

Go 언어의 패키지란 무엇인가요?

青灯夜游
青灯夜游원래의
2023-01-11 10:19:091549검색

패키지는 여러 Go 소스 코드의 모음이며 고급 코드 재사용 솔루션입니다. Go 언어 패키지는 디렉토리 트리의 조직적 형태를 사용합니다. 일반적으로 패키지 이름은 소스 파일이 있는 디렉토리의 이름입니다. 패키지 이름의 정의에는 패키지가 포함되지 않습니다. 디렉터리 경로이지만 패키지가 참조됩니다. 일반적으로 전체 경로 참조를 사용합니다.

Go 언어의 패키지란 무엇인가요?

이 튜토리얼의 운영 환경: Windows 7 시스템, GO 버전 1.18, Dell G3 컴퓨터.

Go 언어는 패키지를 사용하여 소스 코드를 구성합니다. 패키지는 여러 Go 소스 코드의 모음이며 고급 코드 재사용 솔루션입니다. Go 언어는 fmt, os, io 등과 같은 많은 내장 패키지를 제공합니다.

Golang의 패키지와 폴더는 일대일 대응을 가지며 사용하기 전에 GOPATH 디렉터리에 생성되어야 합니다. Golang의 패키지가 다른 패키지의 내용을 참조해야 하는 경우 사용하기 전에 import 키워드를 사용하여 가져와야 합니다.

모든 소스 코드 파일은 특정 패키지에 속해야 하며, 소스 코드 파일에서 유효한 코드의 첫 번째 줄은 현재 속한 패키지를 선언하는 package pacakgeName 문이어야 합니다. package pacakgeName 语句,通过该语句声明自己所在的包。

包的基本概念

Go语言的包借助了目录树的组织形式,一般包的名称就是其源文件所在目录的名称,虽然Go语言没有强制要求包名必须和其所在的目录名同名,但还是建议包名和所在目录同名,这样结构更清晰。

包可以定义在很深的目录中,包名的定义是不包括目录路径的,但是包在引用时一般使用全路径引用。比如在GOPATH/src/a/b/ 下定义一个包 c。在包 c 的源码中只需声明为package c,而不是声明为package a/b/c,但是在导入 c 包时,需要带上路径,例如import "a/b/c"

包的习惯用法:

  • 包名一般是小写的,使用一个简短且有意义的名称。

  • 包名一般要和所在的目录同名,也可以不同,包名中不能包含- 等特殊符号。

  • 包一般使用域名作为目录名称,这样能保证包名的唯一性,比如 GitHub 项目的包一般会放到GOPATH/src/github.com/userName/projectName 目录下。

  • 包名为 main 的包为应用程序的入口包,编译不包含 main 包的源码文件时不会得到可执行文件。

  • 一个文件夹下的所有源码文件只能属于同一个包,同样属于同一个包的源码文件不能放在多个文件夹下。

包的导入

要在代码中引用其他包的内容,需要使用 import 关键字导入使用的包。具体语法如下:

import "包的路径"

注意事项:

  • import 导入语句通常放在源码文件开头包声明语句的下面;

  • 导入的包名需要使用双引号包裹起来;

  • 包名是从GOPATH/src/

패키지의 기본 개념

Go 언어 패키지는 디렉토리 트리의 구성 형식을 사용하지만 일반적으로 패키지 이름은 소스 파일이 있는 디렉토리 이름입니다. 패키지 이름이 해당 패키지가 있는 디렉터리와 동일해야 한다고 규정하지는 않습니다. 그러나 패키지 이름과 해당 디렉터리가 동일한 이름을 갖는 것이 좋습니다. 구조가 더 명확해졌습니다.

패키지는 매우 깊은 디렉터리에 정의될 수 있습니다. 패키지 이름 정의에는 디렉터리 경로가 포함되지 않지만 일반적으로 패키지를 참조할 때 전체 경로가 사용됩니다. 예를 들어 GOPATH/src/a/b/ 아래에 패키지 c를 정의합니다. c 패키지의 소스 코드에서는 package a/b/c 대신 package c로 선언하면 됩니다. 그러나 c 패키지를 가져올 때는 다음이 필요합니다. 예를 들어 import "a/b/c"를 가져옵니다.

패키지 관용어 사용법:

패키지 이름은 일반적으로 소문자이며 짧고 의미 있는 이름을 사용합니다.

패키지 이름은 일반적으로 해당 패키지가 위치한 디렉터리와 동일하거나 다를 수 있습니다. 패키지 이름에는 -와 같은 특수 기호가 포함될 수 없습니다.
  • 패키지는 일반적으로 도메인 이름을 디렉터리 이름으로 사용하여 패키지 이름의 고유성을 보장합니다. 예를 들어 GitHub 프로젝트의 패키지는 일반적으로 GOPATH/src/github.com/userName/에 배치됩니다. 프로젝트명 디렉토리.
  • main이라는 패키지는 애플리케이션의 엔트리 패키지입니다. 메인 패키지가 포함되지 않은 소스 코드 파일을 컴파일하면 실행 파일을 얻을 수 없습니다.
  • 한 폴더의 모든 소스 코드 파일은 동일한 패키지에만 속할 수 있습니다. 동일한 패키지에 속하는 소스 코드 파일은 여러 폴더에 배치할 수 없습니다.

Package import

코드에서 다른 패키지의 내용을 참조하려면 import 키워드를 사용하여 사용된 패키지를 가져와야 합니다. 구체적인 구문은 다음과 같습니다.

import "lab/test"
import "database/sql/driver"
import "database/sql"

참고:

import 가져오기 문은 일반적으로 소스 코드 파일 시작 부분의 패키지 선언문 아래에 배치됩니다.

가져온 패키지 이름은 이중으로 묶어야 합니다. quotes;

Go 언어의 패키지란 무엇인가요?

패키지 이름 GOPATH/src/ 뒤에서 /를 사용하여 경로를 구분하여 계산됩니다.

🎜🎜🎜🎜패키지 가져오기 경로 🎜🎜🎜🎜패키지의 참조 경로를 작성하는 방법에는 전체 경로 가져오기와 상대 경로 가져오기 두 가지가 있습니다. 🎜🎜🎜전체 경로 가져오기🎜🎜🎜패키지의 절대 경로는 아래와 같이 GOROOT/src/ 또는 GOPATH/src/ 이후 패키지의 저장 경로입니다. 🎜
// 相对路径导入
import "../a"
🎜위 코드의 의미는 다음과 같습니다. 🎜🎜🎜🎜test 패키지는 self입니다. 정의된 패키지의 소스 코드는 GOPATH/src/lab/test 디렉토리에 있습니다. 🎜🎜🎜🎜driver 패키지의 소스 코드는 GOROOT/src/database/sql에 있습니다. /driver 디렉토리; 🎜🎜🎜🎜sql 패키지의 소스 코드는 GOROOT/src /database/sql 디렉토리에 있습니다. 🎜🎜🎜🎜🎜상대 경로 가져오기🎜🎜🎜상대 경로는 GOPATH 아래의 패키지를 가져오는 데만 사용할 수 있으며, 표준 패키지는 전체 경로를 통해서만 가져올 수 있습니다. 🎜🎜예를 들어 패키지 a의 경로는 GOPATH/src/lab/a이고 패키지 b의 경로는 GOPATH/src/lab/b입니다. 패키지 b에서 패키지 a를 가져오는 경우 상대 경로 가져오기를 사용할 수 있습니다. 방법. 예는 다음과 같습니다. 🎜
// 全路径导入
import "lab/a"
🎜 물론 아래와 같이 위의 전체 경로 가져오기를 사용할 수도 있습니다. 🎜rrreee🎜🎜🎜Package loading🎜🎜🎜🎜이전 일련의 연구를 통해 나는 모든 사람이 Go 프로그램의 시작 및 시작에 대한 일반적인 이해. 로딩 과정에서 메인 패키지의 주요 기능을 실행하기 전에 Go 부팅 프로그램은 전체 프로그램 패키지를 초기화합니다. 전체 실행 과정은 아래 그림과 같습니다. 🎜🎜🎜🎜사진: Go 패키지 초기화 🎜🎜Go 언어 패키지 초기화에는 다음과 같은 특징이 있습니다. 🎜
  • 패키지 초기화 프로그램은 기본 함수가 참조하는 패키지부터 시작하여 다른 패키지를 참조하지 않는 패키지를 찾을 때까지 단계별로 패키지 참조를 검색하고 마지막으로 패키지 참조의 방향성 비순환 그래프를 생성합니다.

  • Go 컴파일러는 방향성 비순환 그래프를 트리로 변환한 다음 트리의 리프 노드부터 시작하여 계층별로 패키지 계층을 초기화합니다.

  • 단일 패키지의 초기화 과정은 위 그림과 같습니다. 상수가 먼저 초기화되고, 전역 변수가 초기화되고, 마지막으로 패키지의 init 함수가 실행됩니다.

Golang 패키지 사용법 요약

Go 언어의 소스 코드 구성은 패키지 형태입니다. Go 언어의 기본 기능은 기본 패키지의 시스템에서만 실행할 수 있습니다.

【관련 추천: Go 비디오 튜토리얼, 프로그래밍 교육

위 내용은 Go 언어의 패키지란 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.