유니코드 문자 단위 처리

김대익·2022년 4월 18일
0

Go언어 소스코드는 UTF-8로 되어있다.
(UTF-8 인코딩은 유니코드를 이진수로 저장하는 규칙들 중 하나이다)

fmt.Println같은 함수 사용시 UTF-8 환경에서 출력하게되기 때문에
소스코드의 문자열은 UTF-8로 인코딩되었기에 제대로 화면에 출력된다.

for i, r := range "가나다" {
	fmt.Println(i, r)
}
fmt.Println(len("가나다"))

위 코드를 출력해보면
0 44032
3 45208
6 45796
9
가 나온다.


위 for문을 이옹하여 조사 적용을 매끄럽게하는 코드를 보면

//hangul.go
var (
	start = rune(44032) //"가" 유니코드 포인트
    end = rune(55204) //"힣" 유니코드 포인트
)

func HasConsonantSuffix(s string) bool {
	numEnds := 28
    result := false
    for _,r := range s {
    	if start <= r && r < end {
        	index := int(r - start)
        	result = index % numEnds != 0
        }
    }
	return result
}

이제 이 함수의 테스트를 만들어보면

원하는파일이름_test.go로 파일을 만들고
메인함수로 쓸만한 내용에 이름을 func Example원하는함수이름() 으로 만들어야한다.

그리고 테스트를 실행하려면 go test hangul_test.go hangul.go를 실행하면 된다.

//hangul_test.go
package hangul

import "fmt"

func ExampleHasConsonantSuffix() {
	fmt.Println(HasConsonantSuffix("Go 언어"))
    fmt.Println(HasConsonantSuffix("그럼"))
    fmt.Println(HasConsonantSuffix("우리 밥 먹고 합시다."))
    // Output:
    // false
    // true
    // false
}

여기서 Output의 주석처리된 부분들이 실제로 테스트할 때 검사가 된다

0개의 댓글