Skip to main content

[Go] 문자열

큰따옴표와 백틱


package main

import "fmt"

func main() {
str1 := "Hello \t 'world' \n"
str2 := `Hello \t 'world' \n`
fmt.Println(str1)
fmt.Println(str2)
}

백틱을 이용하면 특수문자가 적용이 안됩니다.

Hello    'world' 

Hello \t 'world' \n
package main

import "fmt"

func main() {
str1 := "여러 문자열을 사용하고 싶다.\n 그럴려면 엔터 특수문자를 사용해줘야 한다."
str2 := `여러 문자열을 사용하고 싶다.
그냥 엔터를 치면 된다.`
fmt.Println(str1)
fmt.Println(str2)
}

백틱에서는 엔터를 칠 수 있습니다. 근데 tap도 유의해야 합니다.

여러 문자열을 사용하고 싶다.
그럴려면 엔터 특수문자를 사용해줘야 한다.
여러 문자열을 사용하고 싶다.
그냥 엔터를 치면 된다.

rune


golang에는 rune이라는게 있는데 int32의 별칭 char 타입이라고 합니다.

package main

import "fmt"

func main() {
var ch rune = '닭'

fmt.Printf("타입은 : %T\n", ch)
fmt.Println("값은 : ", ch)
fmt.Printf("문자는 : %c", ch)
}

int32 타입이라 값은 숫자가 들어있습니다.

타입은 : int32
값은 : 45805
문자는 :
var ch rune = 'a'
fmt.Print(ch)

a를 출력해보면 97이 출력됩니다. 아스키 코드 값이 나오는 것을 알 수 있습니다.

len


package main

import "fmt"

func main() {
str1 := "abcdefg"
str2 := "가나다라마바사"

fmt.Printf("영어 %s의 크기 : %d\n", str1, len(str1))
fmt.Printf("한글 %s의 크기 : %d\n", str2, len(str2))
}

len을 사용하면 문자열의 길이가 아닌 크기를 출력합니다.

크기의 단위는 바이트 입니다.

영어 abcdefg의 크기 : 7
한글 가나다라마바사의 크기 : 21

영어는 문자 하나에 1byte 한글은 3byte입니다.

문자열의 길이 구하기


package main

import "fmt"

func main() {
str := "real 문자열의 길이는 ?"

runes := []rune(str)

fmt.Printf("문자열의 길이 : %d\n", len(str))
fmt.Printf("rune으로 변환한 문자열의 길이 : %d", len(runes))
}
문자열의 길이 : 29
rune으로 변환한 문자열의 길이 : 1

문자열을 rune 타입으로 변환하고 len()을 사용하면 진짜 문자열의 길이를 구할 수 있습니다.

그 이유는

package main

import "fmt"

func main() {
str := "real 문자열의 길이는 ?"

runes := []rune(str)
fmt.Printf("rune : %v", runes)
}
rune : [ 114 101 97 108 32 47928 51088 50676 51032 32 44600 51060 45716 32 63 ]

rune으로 변환하면 한글자 씩 값으로 담기기 때문에 영어와 한글이 같이 있어도 문자열의 길이를 쉽게 알 수 있습니다.