안녕하세요 이온들이 또 왔습니다
AI가 언젠가 성취할 무언가를 배울 것이라는 두려움 때문에 저는 완전히 괴로워합니다. 하지만 "문제 해결"이 여전히 미래 인류에게 부과된 요구 사항이라면 지속하지 않겠습니까?
이번에는 또 다른 튜토리얼을 가져왔습니다. 첫 번째보다 덜 쓸모가 있습니다. 따라서 "문제"의 구조를 정의해 봅시다. 왜냐하면 우리는 이미 한 가지를 알고 있기 때문입니다. 문제가 없는 사람들은 충분히 보이지 않았기 때문입니다. 아직 찾지 못한 분들도 만들 수 있게 되는 것은 시간문제일 뿐입니다.
가장 간단한 프로그램 구조는 다음과 같습니다.
디렉토리를 만들고 탐색하세요.
mkdir organizador cd organizador
organizer.go 파일을 만들고 해당 모듈을 시작합니다.
touch organizador.go go mod init organizador.go
다음과 비슷해야 합니다.
~/organizador . ├── go.mod └── organizador.go
조직을 수행할 소스 디렉터리dirOrigem을 정의해 보겠습니다. 정의한 후 실제로 존재하는지 확인해 보겠습니다. 그렇지 않으면 오류가 반환됩니다.
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) } }
이제 위 코드에 대해 몇 가지 고려해 보겠습니다.
여기서 우리는 기계식 키보드의 사운드에 맞춰 조금씩 비트와 바이트를 즐기고 있다는 것을 알고 계셨나요? _차카차카붐! _
이제 콜백 함수를 만들어 보겠습니다. 실제로 배운 적이 없거나 Golang 이전 생활에서 Python 코드에서 이 개념을 사용한 적이 있는지 질문할 만큼 호기심이 없었던 것입니다.
콜백 함수는 인수와 함께 다른 함수에 전달되는 함수입니다.
이미 개념을 알고 계시다면 축하하고 그렇지 않다면 축하합니다. 즉, 축하드립니다!
이제 다른 함수에 인수로 전달될 filepath.Walk 콜백 함수를 만들어 보겠습니다.
mkdir organizador cd organizador
touch organizador.go go mod init organizador.go
잠깐만요, filepath.Walk는 콜백 함수를 어떻게 호출하나요?
filepath.Walk(sourcedir, listFiles)를 호출하면 filepath.Walk 함수는 sourcedir 내의 모든 파일과 하위 디렉터리를 탐색하는 무거운 작업을 수행합니다.
발견된 각 파일이나 디렉터리에 대해 세 가지 인수를 사용하여 listFiles 함수를 호출합니다.
Go는 filepath.Walk가 정확히 다음 서명을 따르는 함수를 기대하기 때문에 listFiles가 이 세 가지 매개변수를 받아야 한다는 것을 자동으로 이해합니다.
~/organizador . ├── go.mod └── organizador.go
Walk 함수가 오류를 반환한다는 점에 유의하세요! 이것은 관련이 있습니다!
그래서 우리는 함수 filepath.Walk(dirOrigem,listarArquivos)를 오류:
와 동일시합니다.
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) } }
결국 오류를 반환하기 때문에 오류입니다 XD
각 단계에서 어떤 일이 일어나는지 자세히 살펴보세요.
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) } }
dirOrigem의 각 파일 또는 디렉터리에 대해 filepath.Walk는 다음과 같은 것처럼 listFiles를 호출합니다.
// 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 }
이 예에서는 각 통화에 대해 다음을 수행합니다.
listFiles는 filepath.Walk가 이러한 값을 사용하여 자동으로 호출하는 콜백 함수입니다. 이렇게 하면 경로, 정보 및 오류 값 설정에 대해 걱정할 필요가 없습니다. filepath.Walk는 이미 이 작업을 수행하고 있습니다.
피!
이제 터미널에서 장난스러운 테스트를 수행해 보세요.
// Função Walk() func Walk(root string, walkFn WalkFunc) error // Tipo WalkFunc type WalkFunc func(path string, info os.FileInfo, err error) error
결과를 얻을 수 있습니다:
err := filepath.Walk(dirOrgiem, listarArquivos)
또는:
//Percorrer e listar os arquivos no diretório err := filepath.Walk(dirOrigem, listarArquivos)
이 경우에는 Origin 디렉토리가 올바르지 않도록 "다운로드"에 "s"를 추가로 넣었습니다.
이제 listFiles 함수를 사용하지 않을 것이므로 삭제하세요.
농담입니다. 이름을 바꾸고 다른 로직을 추가하겠습니다.
정리도 좋고, 정리도 짱입니다.
제가 훌륭하게 관찰한 후에 우리가 정말 관심을 갖는 부분인 전체 구성으로 넘어가겠습니다.
인생의 아이러니하게도 파일을 정리하기 전에 다음 단계를 위한 아이디어를 정리해야 합니다.
다음 기능에는 기본적으로 다음이 필요합니다.
이 코드의 각 부분이 수행하는 작업을 살펴보겠습니다.
mkdir organizador cd organizador
organizeFiles 함수는 디렉터리 구조에 있는 각 파일이나 폴더에 대해 호출됩니다. 확장자에 따라 각 파일을 정리하기 위한 조건을 확인하고, 필요한 경우 하위 폴더를 생성하고 파일을 이동합니다.
touch organizador.go go mod init organizador.go
여기서 OrganisationFiles 함수는 세 가지 매개변수를 사용합니다.
첫 번째 확인은 파일/디렉토리에 접근할 때 오류가 있는지 여부입니다. 그렇다면 즉시 반환됩니다.
~/organizador . ├── go.mod └── organizador.go
이 스니펫은 두 가지 사항을 확인합니다.
두 조건이 모두 충족되면 파일이 fmt.Println으로 표시됩니다.
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) } }
여기:
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) } }
여기서 기능은 다음과 같습니다.
mkdir organizador cd organizador
이 시점에서 DestinationPath는 파일이 이동될 최종 경로를 나타냅니다. 하위 폴더 경로를 파일 이름에 결합하기 위해 filepath.Join을 사용하여 구성됩니다.
touch organizador.go go mod init organizador.go
기능:
filepath.Walk(dirOrigem,organizeFiles)를 사용하면 이 함수가 디렉터리 내의 각 파일에 전달되어 모든 파일이 자동으로 정리됩니다.
이 코드는 효율적이고 조직화된 형태의 구조인 단일 함수에서 생성 및 이동 로직을 처리하므로 파일 정리 기능에 잘 맞습니다.
REPO: https://github.com/ionnss/organizador
***지구상의 또 다른 하루,
이온
위 내용은 GO에서 다운로드를 정리하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!