>백엔드 개발 >Golang >Golang의 init() 함수를 분석하는 기사

Golang의 init() 함수를 분석하는 기사

青灯夜游
青灯夜游앞으로
2022-10-26 19:17:363685검색

Golang의 init() 함수를 분석하는 기사

Go init 함수에 대한 자세한 설명

각 패키지를 초기화한 후 init() 함수가 자동으로 실행되며, 실행 우선순위는 메인 함수의 실행 우선순위보다 높습니다. [관련 권장 사항: Go 비디오 튜토리얼]

init 함수는 일반적으로 다음 용도로 사용됩니다. 사용하다 먼저 초기화해야 하는 가져온 패키지입니다. 초기화는 항상 단일 스레드에서 패키지 종속성 순서대로 수행됩니다. 이는 아래와 같이 Golang의 런타임 시스템에 의해 제어됩니다.

  • 가져온 패키지 초기화(재귀적 가져오기)
  • 블록에 선언된 변수에 초기값 계산 및 할당
  • 패키지에서 초기화 함수 실행

initial.go

package main
import "fmt"
var _ int64=s()
func init(){
  fmt.Println("init function --->")
}
func s() int64{
  fmt.Println("function s() --->")
  return 1
}
func main(){
  fmt.Println("main --->")
}

    실행 결과
  • function s() —>
  • init function —>
  • main —>

패키지를 여러 번 import하더라도 초기화는 한 번만 하면 됩니다.

Features

init 함수는 매개변수를 전달할 필요도 없고 값을 반환할 필요도 없습니다. main과 달리 init은 선언되지 않으므로 참조할 수 없습니다.

package main
import "fmt"
func init(){
  fmt.Println("init")
}
func main(){
  init()
}
위 함수 "

"을 컴파일하는 동안 오류가 발생했습니다.

각 소스 파일에는 하나 이상의 init 함수가 포함될 수 있으며, 각 소스 파일에 적힌 "행진의 길"에는 하나의 init 함수만 포함될 수 있다는 점을 기억하세요. 이는 약간 다르므로 다음 검증을 진행하세요.

package main
import "fmt"
func init(){
  fmt.Println("init 1")
}
func init(){
  fmt.Println("init2")
}
func main(){
  fmt.Println("main")
}
/* 实施结果:
init1
init2
main */

위의 예에서 각 소스 파일에 여러 개의 init 함수가 포함될 수 있음을 알 수 있습니다.

초기화 함수의 일반적인 예는 초기 표현식의 값을 설정하는 것입니다.

var precomputed=[20]float64{}
func init(){
  var current float64=1
  precomputed[0]=current
  for i:=1;i<len(precomputed);i++{
    precomputed[i]=precomputed[i-1]*1.2
  }
}

위 코드(문장)에서는 미리 계산된 값에 대해 for 루프를 사용할 수 없으므로 init 함수를 사용하면 이 문제를 해결할 수 있습니다.

Go 패키지 가져오기 규칙의 부작용

Go는 매우 엄격하며 사용되지 않는 패키지에 대한 참조를 허용하지 않습니다. 그러나 때로는 일부 초기화를 수행하기 위해 init 함수를 호출하기 위해 패키지를 참조하는 경우도 있습니다. 빈 식별자(즉, 밑줄)의 목적은 이 문제를 해결하는 것입니다.

import _ "image/png"
undefined:init

요약

위 내용은 이 글의 전체 내용입니다. 이 글의 내용이 귀하의 연구나 업무에 참고가 되기를 바랍니다.

원본 주소: https://developpaper.com/detailed-explanation-of-init-function-in-go-언어/

번역 주소: https://learnku.com/go/t/47178

프로그래밍 관련 지식을 더 보려면

프로그래밍 비디오

를 방문하세요! !

위 내용은 Golang의 init() 함수를 분석하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 learnku.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제