Verifying File Executability in Go
In Go, you can determine whether a file is executable by examining its file mode, specifically the permission bits. Here's how you can construct a function to perform this check:
<code class="go">import ( "os" ) func IsExecutable(mode os.FileMode) bool { return mode&0111 != 0 }</code>
This function uses the bitwise AND operator (&) to extract the lowest 9 permission bits (0777 octal bitmask) from the file mode. The bitmask 0111 allows us to verify if any of the file's permission bits are set for execution. If any bits are set, the function returns true.
Test Case:
Consider the following test case:
<code class="sh">#!/usr/bin/env bash ... # create test directory and files ... # set executable permission on quux.sh chmod +x test/foo/bar/quux.sh ...</code>
And the corresponding Go code:
<code class="go">import ( "os" "path/filepath" "fmt" ) 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, IsExecutable(info.Mode())) } }</code>
Running this code should print:
test/foo/bar/baz.txt false test/foo/bar/quux.sh true
This confirms that baz.txt is not executable while quux.sh is, as intended by the test case.
Windows Compatibility
The provided solution is specific to Unix systems, including Linux and macOS. For Windows, you can use the os. executable function to determine if a file is executable. However, it's worth noting that os.Executable only indicates whether the file has the ".exe" extension, not its actual executability.
The above is the detailed content of How to Determine if a File is Executable in Go?. For more information, please follow other related articles on the PHP Chinese website!