이 글은 골든래빗 《Tucker의 Go 언어 프로그래밍》의 15장 써머리입니다.
fmt.Println("Hello\t\tWorld") //Hello World
fmt.Println(`Hello\t\tWorld`) //Hello\t\tWorld
fmt.Println("한줄\n내려진다")
fmt.Println(`한줄
내려진다`)
//출력결과는 둘 다 아래와 같다.
한줄
내려진다
type rune int32 라고 보면 된다!
var char rune = '한'
fmt.Printf("%T\n", char) //char 타입 출력: int32
fmt.Println(char) //char 값 출력: 54620
fmt.Printf("%c\n", char) //문자 출력: 한
str1 := "가나다라마"
str2 := "abcde"
fmt.Println(len(str1)) //15
fmt.Println(len(str2)) //5
- 인덱스를사용한 바이트 단위 순회
- []rune 으로 타입 변환 후 한 글자씩 순회
- range 키워드를 이용한 한 글자씩 순회
func Test_stringIterateByIndex(t *testing.T) {
str := "Hello 월드"
for i := 0; i < len(str); i++ {
fmt.Printf("타입:%T 값:%d 문자값: %c\n", str[i], str[i], str[i])
}
}
//출력값
타입:uint8 값:72 문자값: H
타입:uint8 값:101 문자값: e
타입:uint8 값:108 문자값: l
타입:uint8 값:108 문자값: l
타입:uint8 값:111 문자값: o
타입:uint8 값:32 문자값:
타입:uint8 값:236 문자값: ì
타입:uint8 값:155 문자값:
타입:uint8 값:148 문자값:
타입:uint8 값:235 문자값: ë
타입:uint8 값:147 문자값:
타입:uint8 값:156 문자값:
func Test_stringIterateByRuneSlice(t *testing.T) {
str := "Hello 월드"
arr := []rune(str)
for i := 0; i < len(arr); i++ {
fmt.Printf("타입:%T 값:%d 문자값: %c\n", arr[i], arr[i], arr[i])
}
}
//출력값
타입:int32 값:72 문자값: H
타입:int32 값:101 문자값: e
타입:int32 값:108 문자값: l
타입:int32 값:108 문자값: l
타입:int32 값:111 문자값: o
타입:int32 값:32 문자값:
타입:int32 값:50900 문자값: 월
타입:int32 값:46300 문자값: 드
func Test_stringIterateByRange(t *testing.T) {
str := "Hello 월드"
for _, v := range str {
fmt.Printf("타입:%T 값:%d 문자값: %c\n", v, v, v)
}
}
//출력값
타입:int32 값:72 문자값: H
타입:int32 값:101 문자값: e
타입:int32 값:108 문자값: l
타입:int32 값:108 문자값: l
타입:int32 값:111 문자값: o
타입:int32 값:32 문자값:
타입:int32 값:50900 문자값: 월
타입:int32 값:46300 문자값: 드
+
와 +=
연산을 사용해 문자열을 합칠 수 있다.==
!=
를 사용해 문자열의 값 비교가 가능하다.>
<
>=
<=
연산자를 이용해 문자열 대소비교가 가능하다.type StringHeader struct {
Data uintptr
Len int
}
func Test_reflectStringHeader(t *testing.T) {
str := "Hello 월드"
strHeader := (*reflect.StringHeader)(unsafe.Pointer(&str))
t.Log(strHeader.Data, strHeader.Len) //4309419814 12
}
func Test_stringImmutable(t *testing.T) {
str := "Hello 월드"
strHeader := (*reflect.StringHeader)(unsafe.Pointer(&str))
t.Log(strHeader.Data, strHeader.Len)
str = "Hello Go"
t.Log(strHeader.Data, strHeader.Len)
str += "!"
t.Log(strHeader.Data, strHeader.Len)
}
func Test_stringsBuilder(t *testing.T) {
var sb strings.Builder
sb.WriteString("Hello")
sb.WriteString(" Go")
sb.WriteString(" World")
fmt.Println(sb.String()) //Hello Go World
}