>백엔드 개발 >Golang >Golang을 사용한 나의 첫 프로젝트

Golang을 사용한 나의 첫 프로젝트

王林
王林원래의
2024-09-09 20:31:32955검색

My First Project using Golang

? 1부: Go를 사용한 파일 작업

? 소개

수년간 JavaScript 경험을 쌓은 프론트엔드 개발자로서 저는 이제 새로운 도전이 필요할 때라고 판단했습니다. 올해 저는 Golang의 세계에 뛰어들기로 결정했습니다. 내 기술을 테스트하고 무기고에 실용적인 도구를 추가하기 위해 혼란스러운 파일 관리에 질서를 부여하도록 설계된 명령줄 도구인 File Organizer를 만들었습니다. ?

방금 큰 프로젝트를 마쳤는데 디렉토리가 이미지, 오디오 파일, 비디오, 문서로 뒤죽박죽되어 있다고 상상해 보세요. 마치 집을 아름답게 장식했지만 모든 가구가 아무렇게나 버려져 있는 것과 비슷합니다. ? 저도 가봤는데 전혀 재미가 없어요!

이 모험의 첫 번째 부분에서는 Go에서의 파일 작업의 기본 사항에 중점을 두고 파일을 확장자에 따라 깔끔한 폴더로 정렬하고 구성하는 방법을 배웁니다. 다이빙할 준비가 되셨나요? 가자!

?️‍♂️ 도전

복잡한 디렉토리 때문에 당황한 적이 있나요? 이미지 파일, 오디오 클립, 비디오 및 문서가 모두 뒤섞여 있습니다. 수동으로 정렬하는 것은 건초 더미에서 바늘을 찾는 것과 같은 느낌이 들 수 있습니다. ?

? 우리의 영웅적인 솔루션

우리는 이 혼란스러운 환경을 체계적인 천국으로 바꾸는 도구를 만들 예정입니다! 파일 정리 도구는 파일을 유형에 따라 자동으로 폴더로 분류합니다. 여기에는 이미지, 여기에는 오디오, 여기에는 비디오, 깔끔하게 정리된 문서가 있습니다. ?

?️ 우리가 이 일을 이룬 방법

우리가 이 놀라운 파일 정렬 기능을 만든 방법은 다음과 같습니다.

1. 디렉토리 경로 가져오기

우리의 여정은 파일이 어디에 숨겨져 있는지 찾는 것부터 시작됩니다.

dir := os.Args[1]

이 줄은 우리 프로그램에 "야, 우리 파일로 가득 찬 디렉토리가 어디 있지?"라고 묻는 것과 같습니다. ?

2. 디렉토리 읽기

다음으로 해당 디렉토리를 들여다보고 거기에 무엇이 있는지 확인해야 합니다.

files, err := os.ReadDir(dir)
var filesToOrder []string

if err != nil {
    log.Fatal(err)
}

우리는 디렉토리의 내용을 읽고 디렉토리가 존재하지 않는 등 문제가 발생하면 프로그램을 중지하고 알려줍니다. ?

3. 디렉토리 건너뛰기

이제 디렉터리는 뒤에 두고 파일에 집중해야 합니다.

for _, file := range files {
    if file.IsDir() {
        continue
    }
    filesToOrder = append(filesToOrder, file.Name())
}

여기서는 각 항목을 반복해서 살펴봅니다. 디렉터리라면 건너뜁니다. 파일인 경우 정리할 파일 목록에 추가합니다. ?️

4. 파일 정렬

파일 목록이 준비되었으면 이제 파일을 새 홈으로 정렬할 차례입니다.

for _, fileName := range filesToOrder {
    fileType := determineType(fileName)

    switch fileType {
    case IMAGE_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "images"))
    case AUDIO_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "audio"))
    case VIDEO_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "videos"))
    case DOCUMENT_TYPE:
        _ = moveToFolder(filepath.Join(dir, fileName), filepath.Join(dir, "documents"))
    default:
        fmt.Printf("Unsupported file type: %s\n", fileName)
    }
}

각 파일을 반복하여 파일 형식을 파악한 다음 올바른 폴더로 보냅니다. 인식할 수 없는 파일 형식을 발견하면 알려드립니다. ?

5. 파일 형식 결정

어떤 종류의 파일을 다루고 있는지 파악하기 위해 다음 편리한 기능을 사용합니다.

func determineType(file string) int {
    for key, value := range ALLOWED_TYPES {
        for _, ext := range value {
            if strings.HasSuffix(file, ext) {
                return key
            }
        }
    }
    return UNDEFINED_TYPE
}

목록과 파일 확장자를 비교하여 이미지, 오디오, 비디오 또는 문서인지 알려줍니다. ?️‍♂️

6. 새 집으로 파일 이동

마지막으로 각 파일을 새 폴더로 이동합니다.

func moveToFolder(src, dest string) error {
    if _, err := os.Stat(dest); os.IsNotExist(err) {
        err := os.Mkdir(dest, 0777)
        if err != nil {
            return err
        }
    }

    fileName := filepath.Base(src)

    err := os.Rename(src, filepath.Join(dest, fileName))

    if err != nil {
        return err
    }

    return nil
}

대상 폴더가 있는지 확인하고 필요한 경우 생성합니다. 그런 다음 파일을 이전 위치에서 새 위치로 이동합니다. ?

7. 지원되지 않는 파일 형식 처리

어떤 카테고리에도 속하지 않는 파일의 경우 다음 사항을 알려드립니다.

default:
    fmt.Printf("Unsupported file type: %s\n", fileName)

지원되지 않는 파일 형식에 대해서는 메시지를 인쇄하므로 정리되지 않은 파일이 무엇인지 정확히 알 수 있습니다. ?


이제 1부가 끝났습니다! ? 우리는 Go에서 파일 작업의 기본 사항을 성공적으로 다루고 파일을 깔끔한 카테고리로 분류했습니다. 하지만 여기에 생각이 있습니다. "아카이브" 또는 "프로젝트"와 같은 새 카테고리를 추가하고 싶다면 어떻게 해야 할까요? 지금 당장은 지도를 살펴보고 코드를 수정해야 합니다. ?

이 접근 방식은 도구를 사용하는 유일한 사람인 경우 유용합니다. 하지만 Go를 모르는 친구들과 이 멋진 도구를 공유한다고 상상해보세요. ?️ 코드를 이해하지 않고도 누구나 쉽게 맞춤설정할 수 있도록 만들고 싶을 것입니다.

두려워하지 마세요! 다음 부분에서는 File Organizer 도구에 대해 더 자세히 알아보고 이러한 문제를 해결하는 고급 기능을 알아 보겠습니다. ? 우리는 누구나 Go 코드를 한 줄도 작성하지 않고도 도구를 수정하고 향상할 수 있도록 만들 것입니다. 흥미가 있으신가요? 계속 지켜봐 주시기 바랍니다!

질문이 있거나 자세한 내용이 필요하신가요? 아래에 입력하고 채팅해 보세요! ?



위 내용은 Golang을 사용한 나의 첫 프로젝트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.