Go의 os.FileMode 함수 이해: 정수에서 권한 변환
Go의 os.FileMode 함수를 사용하면 개발자가 파일 권한 플래그를 설정할 수 있습니다. . 그러나 정수, 8진수 및 기타 형식의 권한 변환을 처리하는 방법에 대한 의문이 제기되었습니다.
원래 10진수 및 8진수 값과 관련된 권한 버그로 보고되었지만 근본적인 문제는 입력의 기본 형식에서 비롯됩니다. 숫자. Go는 접두사 또는 형식에 관계없이 os.FileMode에 대한 모든 입력을 정수로 처리합니다.
명확하게 설명하자면 os.FileMode(700)를 호출하면 8진수 해석이 발생하지 않지만 정수 값 700이 유지됩니다. '--w-rwxr--' 권한(8진수로 274)의 실제 결과는 '--w-r-xr--'(8진수로 254)입니다.
이 문제를 해결하려면 항상 정수를 다음과 같이 지정하세요. 8진수 값 앞에 0을 붙입니다. 아래 예에서 os.FileMode(0700)는 예상대로 권한을 올바르게 설정합니다: '-rwx------'(8진수에서는 700).
또는, 다음 코드를 사용하여 10진수 값 700을 8진수로 수동으로 변환합니다.
<code class="go">mode := uint(0) // 0 is the octal separator mode |= 1 << 6 // read permission for owner mode |= 1 << 5 // write permission for owner mode |= 1 << 3 // execute permission for owner fmt.Println(os.FileMode(mode).String()) // Output: -rwx------</code>
go 문서에서는 FileMode 유형이 uint32이고 9개의 LSB가 파일 권한을 나타내고 상위 12비트가 특수 파일 기능을 나타냄을 강조합니다. . 선행 8진수 구분 기호 없이 os.FileMode에서 10진수 값을 사용하면 기본 해석으로 인해 예기치 않은 동작이 발생할 수 있습니다.
따라서 혼동을 피하고 올바른 권한 설정을 보장하려면 항상 다음 지침을 따르십시오.
위 내용은 Go용 os.FileMode에서 권한 값을 올바르게 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!