Home  >  Article  >  Backend Development  >  How to Determine if a File is Executable in Go?

How to Determine if a File is Executable in Go?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 19:30:29752browse

How to Determine if a File is Executable in Go?

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn