Go의 소스 파일 디렉터리에서 파일 액세스
통역 언어와 달리 Go 프로그램은 직접 실행되지 않고 컴파일됩니다. 이는 컴파일 후에 바이너리를 실행하는 데 더 이상 소스 파일이 필요하지 않음을 의미합니다. 결과적으로 Go는 소스 파일의 위치를 결정하기 위해 Ruby의 __FILE__ 매크로와 직접적으로 동일한 기능을 제공하지 않습니다.
Go에서 바이너리 코드를 생성하는 데 사용되는 기본 함수는 os.Open 함수입니다. 기본적으로 이 함수는 현재 작업 디렉터리($PWD)에서 파일을 검색합니다. 소스 파일과 동일한 디렉터리에 있는 파일을 열려면 상대 경로를 사용할 수 있습니다. 그러나 이 접근 방식이 항상 편리한 것은 아닙니다. 특히 소스 파일을 다른 위치로 이동하거나 복사하는 경우에는 더욱 그렇습니다.
이 문제를 해결하려면 런타임 패키지의 Runtime.Caller 함수를 사용하는 것이 좋습니다. 이 함수는 여러 인수를 허용하며 그 중 하나는 검사 중인 스택의 깊이입니다. 0 값을 제공하면 런타임.Caller는 Caller에 대한 호출이 포함된 함수 호출자의 파일 이름과 줄 번호를 반환합니다. 예:
<code class="go">import "runtime" func main() { _, file, _, _ := runtime.Caller(0) err := os.Open(file + "/myfile.txt") if err != nil { log.Fatal(err) } }</code>
이 코드에서 Runtime.Caller 함수는 소스 파일의 파일 이름을 가져온 다음 열려는 파일의 상대 경로와 결합하는 데 사용됩니다. 이렇게 하면 위치에 관계없이 파일이 항상 소스 파일을 기준으로 열리게 됩니다.
위 내용은 Go에서 소스 파일 디렉터리의 파일에 어떻게 액세스하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!