如何在 Go 中确定可执行文件状态
给定一个 os.FileInfo 实例,您可能需要检查文件是否在 Go 中可执行去。这需要破译 os.FileInfo.Mode() 中的权限位。
测试用例:
#!/usr/bin/env bash mkdir -p test/foo/bar touch test/foo/bar/{baz.txt,quux.sh} chmod +x test/foo/bar/quux.sh
<code class="go">import ( "os" "path/filepath" "fmt" )</code>
解决方案:
文件的可执行性由存储在 os.FileMode.Perm() 中的 Unix 权限位决定。这些位形成 9 位位掩码(八进制 0777)。
Unix 权限位含义:
rwxrwxrwx
对于每个用户类:
检查可执行性的函数:
可由所有者执行:
<code class="go">func IsExecOwner(mode os.FileMode) bool { return mode&0100 != 0 }</code>
由组执行:
<code class="go">func IsExecGroup(mode os.FileMode) bool { return mode&0010 != 0 }</code>
可由其他人执行:
<code class="go">func IsExecOther(mode os.FileMode) bool { return mode&0001 != 0 }</code>
可由任何人执行:
<code class="go">func IsExecAny(mode os.FileMode) bool { return mode&0111 != 0 }</code>
所有人可执行:
<code class="go">func IsExecAll(mode os.FileMode) bool { return mode&0111 == 0111 }</code>
<code class="go">func main() { filepath.Walk("test", func(path string, info os.FileInfo, err error) error { if err != nil || info.IsDir() { return err } fmt.Printf("%v %v", path, IsExecAny(info.Mode().Perm())) } }</code>
预期输出:
test/foo/bar/baz.txt false test/foo/bar/quux.txt true
以上是如何判断Go文件是否可执行?的详细内容。更多信息请关注PHP中文网其他相关文章!