Hallo, Ionen hier wieder.
Die Angst, etwas zu lernen, was eine KI eines Tages schaffen wird, macht mich völlig verzweifelt. Aber wenn „Probleme lösen“ immer noch eine Anforderung an die Menschen der Zukunft ist, warum dann nicht daran festhalten?
Dieses Mal bringe ich ein weiteres Tutorial mit. Weniger nutzlos als das erste. Definieren wir also die Strukturen von „Problemen“, denn eines wissen wir bereits: Wer keine Probleme hat, liegt daran, dass er nicht ausreichend hingesehen hat. Und für diejenigen, die sie noch nicht gefunden haben, ist es nur eine Frage der Zeit, bis sie sie erstellen können.
Die einfachste Struktur des Programms ist:
Erstellen Sie ein Verzeichnis und navigieren Sie dorthin:
mkdir organizador cd organizador
Erstellen Sie eine Organizer.go-Datei und starten Sie ihre Module:
touch organizador.go go mod init organizador.go
Sie sollten ungefähr so etwas haben:
~/organizador . ├── go.mod └── organizador.go
Lassen Sie uns das QuellverzeichnisdirOrigem definieren, in dem wir die Organisation durchführen werden. Wenn es definiert ist, prüfen wir, ob es tatsächlich existiert. Andernfalls geben wir einen Fehler zurück:
package main import ( "fmt" "os" ) // Defina o deretório o qual você quer organizar como variável global var dirOrigem string := "/Users/User/Downloads" // Troque o diretório func main() { // Verificar se o diretório existe, caso contrário, retornar erro if _, err := os.Stat(dirOrigem); os.IsNotExist(err) { fmt.Println("BAD DIR :( \nDiretório não encontrado: ", dirOrigem) return } else { // Imprimir mensagem caso o diretório exista fmt.Println("GOOD DIR :) \nDiretório encontrado: ", dirOrigem) } }
Lassen Sie uns nun einige Überlegungen zum obigen Code anstellen:
Haben Sie bemerkt, dass wir hier nach und nach vorgehen und die Bits und Bytes zum Klang der mechanischen Tastatur genießen? _Tchaka Tchaka Boom! _
Und jetzt erstellen wir eine Rückruffunktion. Etwas, von dem ich eigentlich nie etwas gelernt hatte oder von dem ich nie neugierig genug war, um zu fragen, ob ich dieses Konzept in meinem Leben vor Golang jemals in einem Python-Code verwendet habe.
Eine Callback-Funktion ist eine Funktion, die mit einem Argument an eine andere Funktion übergeben wird.
Wenn Sie mit dem Konzept bereits vertraut sind, herzlichen Glückwunsch, ansonsten herzlichen Glückwunsch. Mit anderen Worten, herzlichen Glückwunsch!
Jetzt erstellen wir eine filepath.Walk-Rückruffunktion, die als Argument an eine andere Funktion übergeben wird.
mkdir organizador cd organizador
touch organizador.go go mod init organizador.go
Aber Moment, wie ruft filepath.Walk die Callback-Funktion auf?
Wenn Sie filepath.Walk(sourcedir, listFiles) aufrufen, übernimmt die filepath.Walk-Funktion die schwere Arbeit, alle Dateien und Unterverzeichnisse in sourcedir zu durchsuchen.
Für jede gefundene Datei oder jedes gefundene Verzeichnis wird die Funktion „listFiles“ mit drei Argumenten aufgerufen:
Go versteht automatisch, dass listFiles diese drei Parameter erhalten muss, da filepath.Walk eine Funktion erwartet, die genau dieser Signatur folgt:
~/organizador . ├── go.mod └── organizador.go
Beachten Sie, dass die Walk-Funktion einen Fehler zurückgibt! Das ist relevant!
Deshalb setzen wir unsere Funktion filepath.Walk(dirOrigem,listarArquivos) mit einem err:
gleich
package main import ( "fmt" "os" ) // Defina o deretório o qual você quer organizar como variável global var dirOrigem string := "/Users/User/Downloads" // Troque o diretório func main() { // Verificar se o diretório existe, caso contrário, retornar erro if _, err := os.Stat(dirOrigem); os.IsNotExist(err) { fmt.Println("BAD DIR :( \nDiretório não encontrado: ", dirOrigem) return } else { // Imprimir mensagem caso o diretório exista fmt.Println("GOOD DIR :) \nDiretório encontrado: ", dirOrigem) } }
Da es schließlich einen Fehler zurückgibt, handelt es sich um einen Fehler XD
Hier ist ein detaillierterer Blick darauf, was bei jedem Schritt passiert:
func main() { // Restante do código . . . // Percorrer e listar os arquivos no diretório dirOrigem err := filepath.Walk(dirOrigem, listarArquivos) if err != nil { fmt.Println("Erro ao percorrer o diretório: ", err) } }
Für jede Datei oder jedes Verzeichnis in dirOrigem ruft filepath.Walk listFiles auf, als wäre es etwa so:
// Função que lista os arquivos do diretório func listarArquivos(caminho string, info os.FileInfo, err error) error { if err != nil { return err } // Ignorar diretórios e exibir apenas arquivos if !info.IsDir() && !strings.HasPrefix(info.Name(), ".") { fmt.Println("Arquivo encontrado: ", info.Name()) } return nil }
In diesem Beispiel für jeden Anruf:
listFiles ist eine Rückruffunktion, die filepath.Walk automatisch mit diesen Werten aufruft. Auf diese Weise müssen wir uns nicht um die Festlegung der Pfad-, Info- und Fehlerwerte kümmern; filepath.Walk erledigt das bereits für uns.
PHE!
Jetzt machen Sie diesen frechen Test auf Ihrem Terminal:
// Função Walk() func Walk(root string, walkFn WalkFunc) error // Tipo WalkFunc type WalkFunc func(path string, info os.FileInfo, err error) error
Sie können das Ergebnis haben:
err := filepath.Walk(dirOrgiem, listarArquivos)
Oder:
//Percorrer e listar os arquivos no diretório err := filepath.Walk(dirOrigem, listarArquivos)
In diesem Fall habe ich einfach ein zusätzliches „s“ in „Downloads“ eingefügt, damit das Origin-Verzeichnis falsch wäre.
Löschen Sie nun die listFiles-Funktion, da wir sie nicht verwenden werden.
Nur ein Scherz, wir werden nur ihren Namen ändern und andere Logik hinzufügen.
Organisiert ist gut, Organisieren ist großartig.
Nach dieser brillanten Beobachtung meinerseits kommen wir nun zu dem Teil, der uns wirklich interessiert: der Organisation des Ganzen.
Es ist eine Ironie im Leben, dass wir vor dem Organisieren der Dateien unsere Ideen für die nächsten Schritte organisieren müssen.
Unsere nächste Funktion benötigt grundsätzlich:
Lassen Sie uns verstehen, was jeder Teil dieses Codes bewirkt:
mkdir organizador cd organizador
Die Funktion „OrganizeFiles“ wird für jede in der Verzeichnisstruktur gefundene Datei oder jeden Ordner aufgerufen. Es prüft die Bedingungen zum Organisieren jeder Datei anhand ihrer Erweiterung, erstellt bei Bedarf Unterordner und verschiebt Dateien.
touch organizador.go go mod init organizador.go
Hier benötigt die Funktion „OrganizeFiles“ drei Parameter:
Die erste Prüfung besteht darin, ob beim Zugriff auf die Datei/das Verzeichnis ein Fehler vorliegt. Wenn ja, wird es umgehend zurückgesandt.
~/organizador . ├── go.mod └── organizador.go
Dieses Snippet führt zwei Prüfungen durch:
Wenn beide Bedingungen erfüllt sind, wird die Datei mit fmt.Println.
angezeigtpackage main import ( "fmt" "os" ) // Defina o deretório o qual você quer organizar como variável global var dirOrigem string := "/Users/User/Downloads" // Troque o diretório func main() { // Verificar se o diretório existe, caso contrário, retornar erro if _, err := os.Stat(dirOrigem); os.IsNotExist(err) { fmt.Println("BAD DIR :( \nDiretório não encontrado: ", dirOrigem) return } else { // Imprimir mensagem caso o diretório exista fmt.Println("GOOD DIR :) \nDiretório encontrado: ", dirOrigem) } }
Hier:
func main() { // Restante do código . . . // Percorrer e listar os arquivos no diretório dirOrigem err := filepath.Walk(dirOrigem, listarArquivos) if err != nil { fmt.Println("Erro ao percorrer o diretório: ", err) } }
Hier die Funktion:
mkdir organizador cd organizador
Zu diesem Zeitpunkt stellt „destinationPath“ den endgültigen Pfad dar, in den die Datei verschoben wird. Es wird mit filepath.Join erstellt, um den Unterordnerpfad mit dem Dateinamen zu verbinden.
touch organizador.go go mod init organizador.go
Die Funktion:
Mit filepath.Walk(dirOrigem, organiseFiles) wird diese Funktion an jede Datei im Verzeichnis übergeben, wodurch alle Dateien automatisch organisiert werden.
Dieser Code eignet sich gut als Dateiorganisationsfunktion, da er die Erstellungs- und Verschiebungslogik in einer einzigen Funktion abwickelt – eine effiziente und organisierte Form der Struktur.
REPO: https://github.com/ionnss/organizador
***Ein weiterer Tag auf Erden,
Ionen
Das obige ist der detaillierte Inhalt vonOrganisieren Sie Ihre Downloads in GO. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!