반응형

Go 문자열

  • Go는 char type이 존재하지 않고, rune(int32)를 이용해 문자의 코드 값을 표현

I. 문자열 선언

  • Go에서 문자열 선언 시 "(큰 따옴표) 와 `(백스쿼트) 를 사용
var dir1 string = "Develope\\go\\blog\\"
dir2 := `Develope\go\blog\`

fmt.Println(dir1)
>>> Develope\go\blog\

fmt.Println(dir2)
>>> Develope\go\blog\

1. Escape

  • 자주 쓰는 escape
\\ --> \
\` --> `
\" --> "
\a --> 콘솔벨
\b --> 백스페이스
\f --> 쪽 바꿈
\n --> 줄 바꿈
\t --> 탭

II. 문자열 갖고 놀기

1. 문자열 결합

  • '+'로 합치는게 가능하지만, strings.Join 을 사용하는 방식이 권장(속도차이 및 메모리 관리 차원에서 join이 이득)
package main

import (
    "fmt"
    "strings"
)

func main() {
    prefix := "Golang"
    suffix := "is awesome"

    strSlice := []string{}
    strSlice = append(strSlice, prefix)
    strSlice = append(strSlice, suffix)

    fmt.Println("basic : ", prefix+` `+suffix)
    fmt.Println("join : ", strings.Join(strSlice, ` `))
}

2. 길이 구하기

  • 파이썬과 달리 len 을 사용하면 문자열의 길이가 아니라 바이트수를 반환
  • 실제 문자열 길이를 구하기 위해서는 uicode/utf8 패키지의 RuneCountInString 사용하거나 배열로 바꿔 길이를 구해야함(속도는 미세하지만 utf8 패키지를 사용하는 경우가 빠름)
package main

import (
    "fmt"
    "unicode/utf8"
)

func main() {
    str1 := `안녕`

    fmt.Println(str1)  
    fmt.Println(len(str1))  // 문자열의 byte 수를 반환
    fmt.Println(utf8.RuneCountInString(str1)) // string의 rune 타입 길이를 반환
    fmt.Println(len([]rune(str1))) // 위와 동일하되, unicode 패키지 안쓰는 방식
}

>>> 안녕
>>> 6
>>> 2
>>> 2

3. 한글 안 깨트리기

package main

import (
    "fmt"
)

func main() {
    str1 := `안녕`
    runestr1 := []rune(str1)
    fmt.Println(str1)
    fmt.Printf("바로 포맷팅 하는 경우 : %c %c\n", str1[0], str1[1])
    fmt.Printf("치환 후 포맷팅 하는 경우 : %c %c\n", runestr1[0], runestr1[1])
}
>>> 안녕
>>> 바로 포맷팅 하는 경우 : ì •
>>> 치환 후 포맷팅 하는 경우 : 안 녕

4. 문자열로 for문 돌리기

  • 문자열로 반복문을 사용할 수 있어 자연어 처리할 때 편리한 부분이 많음
  • 단 바이트수 항상 주의!
package main

import "fmt"

func main() {
    str1 := `안녕하세요. 반갑습니다.`
    runestr1 := []rune(str1)

    for idx, char := range str1 {
        fmt.Printf("%c(%d) ", char, idx)
    }

    fmt.Println(" ")
    for idx, char := range runestr1 {
        fmt.Printf("%c(%d) ", char, idx)
    }
}
>>> 안(0) 녕(3) 하(6) 세(9) 요(12) .(15)  (16) 반(17) 갑(20) 습(23) 니(26) 다(29) .(32)  
>>> 안(0) 녕(1) 하(2) 세(3) 요(4) .(5)  (6) 반(7) 갑(8) 습(9) 니(10) 다(11) .(12) 
반응형
복사했습니다!