GO에서 init()
함수는 패키지가 초기화 될 때 자동으로 호출되는 특수 함수입니다. 메인 프로그램이 시작되기 전에 실행 해야하는 패키지의 초기 상태 또는 실행 코드를 설정하는 데 사용됩니다. init()
함수는 일반적으로 변수 설정, 데이터베이스 연결 등록 또는 데이터 구조 초기화와 같은 초기화 작업에 사용됩니다.
init()
함수는 인수를 취하지 않으며 값을 반환하지 않습니다. 다음과 같은 서명이 있습니다.
<code class="go">func init() { // Initialization code here }</code>
주목해야 할 중요한 사항 중 하나는 init()
함수가 모든 패키지에 존재하지 않아도된다는 것입니다. 존재하면 GO 런타임까지 자동으로 호출됩니다.
GO의 init()
함수는 일반적으로 다양한 초기화 작업에 사용됩니다. 가장 일반적인 사용 사례 중 일부는 다음과 같습니다.
글로벌 변수 설정 : init()
함수를 사용하여 글로벌 변수를 시작 값으로 초기화 할 수 있습니다. 예를 들어, 글로벌 구성 객체를 설정하거나 전역 맵 또는 슬라이스를 초기화합니다.
<code class="go">var globalConfig Config func init() { globalConfig = LoadConfig() }</code>
데이터베이스 연결 등록 : 종종 프로그램 실행 전반에 걸쳐 사용할 수있는 데이터베이스 또는 기타 외부 서비스에 대한 연결을 설정하는 데 사용됩니다.
<code class="go">var db *sql.DB func init() { var err error db, err = sql.Open("drivername", "username:password@tcp(localhost:5432)/dbname") if err != nil { log.Fatal(err) } }</code>
데이터 구조 초기화 : init()
함수는 복잡한 데이터 구조를 초기화하거나 프로그램의 다른 부분에서 사용할 데이터를 채우는 데 사용될 수 있습니다.
<code class="go">var dataMap map[string]int func init() { dataMap = make(map[string]int) dataMap["value1"] = 10 dataMap["value2"] = 20 }</code>
기능 또는 후크 등록 : 플러그인 시스템 또는 프레임 워크의 일부인 함수 또는 후크를 등록하는 데 사용할 수 있습니다.
<code class="go">func init() { RegisterHandler("/path", handleFunc) }</code>
GO의 init()
함수는 패키지가 초기화 될 때 GO 런타임에 의해 자동으로 실행됩니다. init()
함수의 실행 순서는 특정 규칙을 따릅니다.
A
imports 패키지 B
, B
A
전에 초기화됩니다.init()
함수 : 패키지에 여러 init()
함수가 포함 된 경우 소스 파일 내에서 선언 된 순서대로 실행됩니다. init()
함수가 동일한 패키지 내의 여러 파일에 퍼져있는 경우, 실행 순서는 소스 파일 이름의 어휘 순서에 의해 결정됩니다.main()
이전의 실행 : 모든 init()
함수는 프로그램의 main()
함수가 시작되기 전에 실행됩니다. 이를 통해 프로그램의 주요 실행이 시작되기 전에 필요한 모든 초기화가 완료되도록합니다.다음은 실행 순서를 설명하는 간단한 예입니다.
<code class="go">// main.go package main import ( "fmt" "./packageA" "./packageB" ) func main() { fmt.Println("Main function") } // packageA/a.go package packageA import "fmt" func init() { fmt.Println("Package A init") } // packageB/b.go package packageB import ( "fmt" "./packageA" ) func init() { fmt.Println("Package B init") }</code>
이 프로그램이 실행되면 출력은 다음과 같습니다.
<code>Package A init Package B init Main function</code>
이것은 packageA
packageB
가져 오기 때문에 packageB
packageA
이전에 초기화되며 main()
함수가 호출되기 전에 초기화되기 때문에 PackageB 전에 초기화됩니다.
예, init()
함수는 단일 GO 패키지 내에서 여러 번 사용할 수 있습니다. 패키지 내에 여러 init()
함수가 있으면 소스 파일 내에서 선언 된 순서대로 실행됩니다. init()
함수가 동일한 패키지 내의 여러 파일에 퍼져있는 경우, 실행 순서는 소스 파일 이름의 어휘 순서에 의해 결정됩니다.
다음은 동일한 패키지 내에서 다중 init()
함수를 사용하는 예입니다.
<code class="go">// file1.go package mypackage import "fmt" func init() { fmt.Println("First init function in file1.go") } // file2.go package mypackage import "fmt" func init() { fmt.Println("First init function in file2.go") } func init() { fmt.Println("Second init function in file2.go") }</code>
이 예에서는 init()
함수가 다음 순서로 실행됩니다.
file1.go
의 첫 번째 init()
기능file2.go
에서 첫 번째 init()
함수file2.go
에서 두 번째 init()
함수이를 통해 동일한 패키지 내에서 다른 구성 요소의 모듈 식 초기화가 가능하여 사용하기 전에 패키지를 설정하는 방법에 대한 유연성을 제공합니다.
위 내용은 Go의 init () 함수는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!