golang이 패키지를 가져올 수 없는 문제에 대한 해결책:
패키지 가져오기:
표준 패키지는 "fmt", "net/http"와 같은 지정된 짧은 경로를 사용합니다.
자신의 패키지, 패키지를 가져오려면 작업 디렉터리(GOPATH) 아래에 디렉터리를 지정해야 합니다. 이는 실제로 작업 디렉터리를 기반으로 하는 폴더 디렉터리입니다.
패키지를 가져오는 방법은 다양합니다.
$GOPATH/src 디렉터리 가져오기
import "test/lib"
(실제로 경로는$GOPATH/src/test/lib)
$GOPATH/src
目录导入import "test/lib"
(路径其实是$GOPATH/src/test/lib)
别名导入:
import alias_name "test/lib"
,这样使用的时候,可以直接使用别名使用点号导入:
import . "test/lib"
,作用是使用的时候直接省略包名
使用下划线导入:improt _ "test/lib",该操作其实只是引入该包。当导入一个包时,它所有的init()函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的init()函数被执行而已。这个时候就可以使用_操作引用该包。即使用_操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其init函数()。
往往这些init函数里面是注册自己包里面的引擎,让外部可以方便的使用,例如实现database/sql的包,在init函数里面都是调用了sql.Register(name string, driver driver.Driver)
注册自己,然后外部就可以使用了。
相对路径导入import"./model"//
当前文件同一目录的model目录,但是不建议这种方式import
包的导入过程说明:
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。
当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
注意:
import导入Go包有几种方式,用途不同。 代码统一存储在工作目录下,工作目录里边会有很多个包,不同包按目录组织,包下面由多个代码文件组成。导入包时按包的唯一路径进行导入,导入的包默认是必须要使用,如果不使用则编译失败,需要移除,减少不必要代码的引入,当然还有其他使用场景。默认情况下,我们使用文件名做为包名,方便理解。不同包组织不同的功能实现,方便理解。
编译时使用的是包源码还是.a?
一个非main包在编译后会生成一个.a
文件(在临时目录下生成,除非使用go install安装到$GOROOT
或$GOPATH
下,否则你看不到.a),用于后续可执行程序链接使用。比如Go标准库中的包对应的源码部分路径在:$GOROOT/src
,而标准库中包编译后的.a文件路径在$GOROOT/pkg/darwin_amd64
下。一个奇怪的问题在我脑袋中升腾起来,编译时,编译器到底用的是.a还是源码?
在使用第三方包的时候,当源码和.a均已安装的情况下,编译器链接的是源码。而所谓的使用第三方包源码,实际上是链接了以该最新源码编译的临时目录下的
.a
- Alias import:
import alias_name "test/lib"
, 이런 방식으로 사용하면 별칭을 직접 사용할 수 있습니다
import "test/lib. "
, 직접 사용하는 기능입니다. 패키지 이름 을 생략하고 밑줄을 사용하여 가져옵니다: import _ "test/lib". 이 작업은 실제로 패키지를 가져옵니다. 패키지를 가져오면 해당 패키지의 모든 init() 함수가 실행되지만 때로는 이러한 패키지를 실제로 사용할 필요가 없고 init() 함수만 실행되기를 원할 때도 있습니다. 이때 _ 오퍼레이션을 이용하여 패키지를 참조할 수 있습니다. _ 연산을 사용하여 패키지를 참조하더라도 패키지 이름을 통해 패키지에 내보낸 함수를 호출할 수 없고 단순히 해당 init 함수()를 호출하면 됩니다.
- 이러한 init 함수는 외부에서 편리하게 사용할 수 있도록 자체 패키지에 엔진을 등록하는 경우가 많습니다. 예를 들어 데이터베이스/sql을 구현하는 패키지는 init 함수에서
sql.Register(이름 문자열, 드라이버 드라이버)를 호출합니다. ..Driver)
직접 등록하시면 외부에서 사용하실 수 있습니다. 상대 경로 가져오기import "./model"//
모델 디렉터리는 현재 파일과 동일한 디렉터리에 있지만 이 가져오기 방법은 권장되지 않습니다🎜🎜🎜가져오기 프로세스 지침 package: 🎜 🎜🎜 프로그램 초기화와 실행 모두 메인 패키지에서 시작됩니다. 기본 패키지가 다른 패키지도 가져오는 경우 컴파일하는 동안 순서대로 가져옵니다. 때로는 여러 패키지에서 동시에 패키지를 가져오기 때문에 한 번만 가져옵니다. 예를 들어 많은 패키지가 fmt 패키지를 사용할 수 있지만 여러 패키지를 가져올 필요가 없기 때문에 한 번만 가져옵니다. 타임스). 🎜🎜패키지를 가져올 때 해당 패키지가 다른 패키지도 가져오는 경우 다른 패키지를 먼저 가져온 다음 해당 패키지의 패키지 수준 상수 및 변수가 초기화된 다음 init 함수가 실행됩니다(해당되는 경우). 임의) 등이 있습니다. 가져온 패키지가 모두 로드된 후 메인 패키지의 패키지 수준 상수 및 변수가 초기화되고 메인 패키지의 init 함수가 실행되고(존재하는 경우) 마지막으로 메인 함수가 실행됩니다. 다음 그림은 전체 실행 과정을 자세히 설명합니다. 🎜🎜🎜🎜참고: 🎜🎜Go 패키지를 가져오는 방법에는 다양한 용도가 있습니다. 코드는 작업 디렉터리에 균일하게 저장됩니다. 작업 디렉터리에는 다양한 패키지가 디렉터리별로 구성되며 패키지는 여러 코드 파일로 구성됩니다. 패키지를 임포트할 때에는 해당 패키지의 고유 경로에 따라 임포트해야 하며, 반드시 임포트된 패키지를 사용하지 않으면 불필요한 코드 도입을 줄이기 위해 컴파일이 실패하게 되므로 제거해야 합니다. , 다른 사용 시나리오가 있습니다. 기본적으로 이해하기 쉽도록 파일 이름을 패키지 이름으로 사용합니다. 다양한 패키지는 이해를 돕기 위해 다양한 기능 구현을 구성합니다. 🎜🎜🎜컴파일할 때 패키지 소스코드나 .a를 사용하셨나요? 🎜🎜🎜 기본 패키지가 아닌 패키지는 컴파일 후
.a
파일을 생성합니다($GOROOT
또는$에 설치하지 않는 한 임시 디렉터리에 생성됨). GOPATH
아래에 설치하세요. 그렇지 않으면 후속 실행 프로그램 연결에 사용되는 a)가 표시되지 않습니다. 예를 들어 Go 표준 라이브러리의 패키지에 해당하는 소스 코드 경로는$GOROOT/src
이고, 표준 라이브러리의 패키지의 컴파일된 .a 파일 경로는입니다. $GOROOT/pkg/darwin_amd64 code> 다음. 이상한 질문이 머릿속에 떠오릅니다. 컴파일할 때 컴파일러는 .a를 사용합니까, 아니면 소스 코드를 사용합니까? 🎜🎜🎜🎜타사 패키지를 사용할 때 소스 코드와 .a가 모두 설치되면 컴파일러가 소스 코드에 연결됩니다. 소위 타사 패키지 소스 코드 사용은 실제로 최신 소스 코드로 컴파일된 임시 디렉터리에 있는 <code>.a
파일에 대한 링크입니다. 🎜🎜🎜🎜 Go 표준 라이브러리의 패키지도 이런가요? fmt와 같은 표준 라이브러리의 경우 컴파일할 때 $GOROOT/src 아래의 소스 코드를 사용해야 할까요, 아니면 $GOROOT/pkg 아래의 컴파일된 .a를 사용해야 할까요? 그러나 사용자 정의 패키지와 달리 (GO 설치 패키지를 다시 컴파일하지 않고) fmt 패키지의 소스 코드를 수정하더라도 사용자 소스 코드가 컴파일되면 fmt 패키지를 다시 컴파일하려는 시도가 없으며 링크는 여전히 유지됩니다. fmt.a🎜🎜🎜🎜🎜Go 언어에서는 가져온 후 경로의 마지막 요소가 패키지 이름인가요, 아니면 경로 이름인가요? 🎜🎜🎜🎜🎜가져오기 후 마지막 요소는 패키지 이름이 아닌 디렉터리인 경로여야 합니다. 그런데 경로명이 패키지명과 같은 경우가 많습니다🎜 import m "lib/math" m은 lib/math 경로에 있는 유일한 패키지를 나타냅니다. 컴파일러가 이 경로에서 두 개의 패키지를 찾으면 허용되지 않으며 컴파일 오류가 보고됩니다.
권장됩니다. 튜토리얼: "go 언어 튜토리얼"
위 내용은 golang이 패키지를 가져올 수 없으면 어떻게 해야 하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Golang은 빠른 개발 및 동시 프로그래밍에 적합한 반면 C는 극심한 성능과 기본 제어가 필요한 프로젝트에 더 적합합니다. 1) Golang의 동시성 모델은 Goroutine 및 Channel을 통한 동시성 프로그래밍을 단순화합니다. 2) C의 템플릿 프로그래밍은 일반적인 코드 및 성능 최적화를 제공합니다. 3) Golang의 쓰레기 수집은 편리하지만 성능에 영향을 줄 수 있습니다. C의 메모리 관리는 복잡하지만 제어는 괜찮습니다.

goimpactsdevelopmentpositively throughlyspeed, 효율성 및 단순성.

C는 하드웨어 리소스 및 고성능 최적화가 직접 제어되는 시나리오에 더 적합하지만 Golang은 빠른 개발 및 높은 동시성 처리가 필요한 시나리오에 더 적합합니다. 1.C의 장점은 게임 개발과 같은 고성능 요구에 적합한 하드웨어 특성 및 높은 최적화 기능에 가깝습니다. 2. Golang의 장점은 간결한 구문 및 자연 동시성 지원에 있으며, 이는 동시성 서비스 개발에 적합합니다.

Golang은 실제 응용 분야에서 탁월하며 단순성, 효율성 및 동시성으로 유명합니다. 1) 동시 프로그래밍은 Goroutines 및 채널을 통해 구현됩니다. 2) Flexible Code는 인터페이스 및 다형성을 사용하여 작성됩니다. 3) NET/HTTP 패키지로 네트워크 프로그래밍 단순화, 4) 효율적인 동시 크롤러 구축, 5) 도구 및 모범 사례를 통해 디버깅 및 최적화.

GO의 핵심 기능에는 쓰레기 수집, 정적 연결 및 동시성 지원이 포함됩니다. 1. Go Language의 동시성 모델은 고루틴 및 채널을 통한 효율적인 동시 프로그래밍을 실현합니다. 2. 인터페이스 및 다형성은 인터페이스 방법을 통해 구현되므로 서로 다른 유형을 통일 된 방식으로 처리 할 수 있습니다. 3. 기본 사용법은 기능 정의 및 호출의 효율성을 보여줍니다. 4. 고급 사용에서 슬라이스는 동적 크기 조정의 강력한 기능을 제공합니다. 5. 레이스 조건과 같은 일반적인 오류는 Getest-race를 통해 감지 및 해결할 수 있습니다. 6. 성능 최적화는 sync.pool을 통해 개체를 재사용하여 쓰레기 수집 압력을 줄입니다.

Go Language는 효율적이고 확장 가능한 시스템을 구축하는 데 잘 작동합니다. 장점은 다음과 같습니다. 1. 고성능 : 기계 코드로 컴파일, 빠른 달리기 속도; 2. 동시 프로그래밍 : 고어 라틴 및 채널을 통한 멀티 태스킹 단순화; 3. 단순성 : 간결한 구문, 학습 및 유지 보수 비용 절감; 4. 크로스 플랫폼 : 크로스 플랫폼 컴파일, 쉬운 배포를 지원합니다.

SQL 쿼리 결과의 정렬에 대해 혼란스러워합니다. SQL을 학습하는 과정에서 종종 혼란스러운 문제가 발생합니다. 최근 저자는 "Mick-SQL 기본 사항"을 읽고 있습니다.

기술 스택 컨버전스와 기술 선택의 관계, 소프트웨어 개발에서 기술 스택의 선택 및 관리는 매우 중요한 문제입니다. 최근에 일부 독자들은 ...


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

Dreamweaver Mac版
시각적 웹 개발 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
