Wie kann man feststellen, ob eine Go-Datei ausführbar ist?

Linda Hamilton
Freigeben: 2024-11-04 00:18:02
Original
984 Leute haben es durchsucht

How to Determine if a Go File is Executable?

So ermitteln Sie den Status einer ausführbaren Datei in Go

Bei einer os.FileInfo-Instanz müssen Sie möglicherweise überprüfen, ob eine Datei in ausführbar ist Gehen. Dies erfordert die Entschlüsselung der Berechtigungsbits von os.FileInfo.Mode().

Testfall:

#!/usr/bin/env bash
mkdir -p test/foo/bar
touch test/foo/bar/{baz.txt,quux.sh}
chmod +x test/foo/bar/quux.sh
Nach dem Login kopieren
<code class="go">import (
    "os"
    "path/filepath"
    "fmt"
)</code>
Nach dem Login kopieren

Lösung:

Die Ausführbarkeit der Datei wird durch die in os.FileMode.Perm() gespeicherten Unix-Berechtigungsbits bestimmt. Diese Bits bilden eine 9-Bit-Bitmaske (0777 oktal).

Bedeutung des Unix-Berechtigungsbits:

rwxrwxrwx
Nach dem Login kopieren

Für jede Benutzerklasse:

  • Besitzer: Bitmask 0100
  • Gruppe: Bitmask 0010
  • Andere: Bitmask 0001

Funktionen zur Prüfung der Ausführbarkeit:

  • Ausführbar nach Eigentümer:

    <code class="go">func IsExecOwner(mode os.FileMode) bool {
      return mode&0100 != 0
    }</code>
    Nach dem Login kopieren
  • Ausführbar nach Gruppe:

    <code class="go">func IsExecGroup(mode os.FileMode) bool {
      return mode&0010 != 0
    }</code>
    Nach dem Login kopieren
  • Ausführbar von anderen:

    <code class="go">func IsExecOther(mode os.FileMode) bool {
      return mode&0001 != 0
    }</code>
    Nach dem Login kopieren
  • Ausführbar von jedem:

    <code class="go">func IsExecAny(mode os.FileMode) bool {
      return mode&0111 != 0
    }</code>
    Nach dem Login kopieren
  • Von allen ausführbar:

    <code class="go">func IsExecAll(mode os.FileMode) bool {
      return mode&0111 == 0111
    }</code>
    Nach dem Login kopieren
<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>
Nach dem Login kopieren

Erwartete Ausgabe:

test/foo/bar/baz.txt false
test/foo/bar/quux.txt true
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man feststellen, ob eine Go-Datei ausführbar ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage