Go Lang - 확장자 찾는 소스
본문 바로가기
Go Lang

Go Lang - 확장자 찾는 소스

by KyeongMin 2021. 7. 22.
728x90
반응형

0.findExt

  • path/filepath 패키지 이용해서 확장자 찾는 소스와 테스트코드

소스 코드

package main

import (
	"path/filepath"
)

func findExtension(path string) string {
	ext := filepath.Ext(path)
	return ext
}

테스트 코드 

package main

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestFindExtension(t *testing.T) {
	assert := assert.New(t)

	testPath := []string{"/go/src/txt.txt", "go/src/test.txt", "go/test1.t", "go/t.SMF/do.txt", ".txt"}
	//test1 일반적인 경우
	assert.Equal(".txt", findExtension(testPath[0]))
	//test2 일반적인 경우2
	assert.Equal(".txt", findExtension(testPath[1]))
	//test3 일반적인 확장자가 아닌경우도 . 이후로 가져오는지 확인
	assert.Equal(".t", findExtension(testPath[2]))
	//test4 폴더명이 .으로 끝나는경우 걸러지는 아닌지 확인
	assert.Equal(".txt", findExtension(testPath[3]))
	//test5 경로없이 바로 파일이 있는 경우
	assert.Equal(".txt", findExtension(testPath[4]))

}

1.regularExpressions

  • 정규표현식을 이용하여 확장자 찾는 소스와 테스트코드

소스 코드

package main

import (
	"regexp"
)

func regularExpressionFind(fileName string) string {
	r, _ := regexp.Compile("\\.[a-zA-Z0-9가-힣]+")
	return r.FindString(fileName)
}

테스트 코드 

package main

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestRegularExpressionCheck(t *testing.T) {
	assert := assert.New(t)
	fileName1 := "test1.txt"
	fileName2 := "test1.001"
	fileName3 := "test1.SMF"
	fileName4 := "test1.SMF.txt"

	assert.Equal(".txt", regularExpressionFind(fileName1))
	assert.Equal(".001", regularExpressionFind(fileName2))
	assert.Equal(".SMF", regularExpressionFind(fileName3))
	assert.Equal(".txt", regularExpressionFind(fileName4)) // .txt를 못찾고 .SMF를 찾음

}

2.FindReverseExt

  • 거꾸로 문자열 탐색해서 확장자 찾기
  • go get github.com/huandu/xstrings 패키지 이용하여 리버스 진행

소스 코드 

package main

import "github.com/huandu/xstrings"

func findExt(fileName string) string {
	var copyExtensions string
	flag := 1
	for index := len(fileName) - 1; index >= 0; index-- {
		if fileName[index] == '.' {
			flag = 0
			break
		}
		copyExtensions += string(fileName[index])
	}
	if flag == 1 { //확장자 없는 경우 에러 처리
		return ""
	}
	copyExtensions = xstrings.Reverse(copyExtensions)

	return copyExtensions
}

//go get github.com/huandu/xstrings 다운 진행

테스트 코드 

package main

import (
	"testing"

	"github.com/stretchr/testify/assert"
)

func TestFindExt(t *testing.T) {
	assert := assert.New(t)

	fileName1 := "1.txt"
	fileName2 := "2.SMF"
	fileName3 := "3.001"
	fileName4 := "4.txt.SMF.001"
	fileName5 := "txt"

	assert.Equal("txt", findExt(fileName1))
	assert.Equal("SMF", findExt(fileName2))
	assert.Equal("001", findExt(fileName3))
	assert.Equal("001", findExt(fileName4))
	assert.Equal("", findExt(fileName5))

}

참고 사이트 

https://github.com/3DPIT/golang/tree/master/0722

 

GitHub - 3DPIT/golang

Contribute to 3DPIT/golang development by creating an account on GitHub.

github.com

 

728x90
반응형

'Go Lang' 카테고리의 다른 글

GoLangWeb-JsonTransfer  (0) 2021.07.28
GoLangWeb-Web Handler  (0) 2021.07.28
Go Lang - 배열과 문자열  (0) 2021.07.19
Go Lang - 함수  (0) 2021.07.18
Go Lang - 모듈과 패키지  (0) 2021.07.18

댓글