갈루아의 반서재

chapter 2 에서 이미 살펴봤듯이 문자열은 텍스트를 표현하기 위한 길이를 가진 문자의 나열이다. 

Go strings 은 개별 바이트로 이루어지며, 보통 문자 하나에 하나의 바이트를 가지지만, 중국어와 같은 문자는 하나 이상의 바이트를 가지기도 한다. 

String literals은 "Hello World"와 같이 큰 따옴표로 감싸거나, `Hello World` 와 같이 역따옴표 감싼다. 이 2가지의 차이점은 큰따옴표의 경우 줄바꿈을 포함할 수 없으며 특정 escape 시퀀스를 허용한다는점이다. 예를 들어, \n 은 줄바꿈을, 그리고 \t 은 탭으로 대체된다.  

문자열의 길이를 잰다거나, 문자열의 개별 문자에 접근하기, 그리고 2개의 문자열을 합치는 기능이 있다. 아래의 예를 보자. 

1
2
3
4
5
6
7
8
9
package main
 
import "fmt"
 
func main() {
  fmt.Println(len("Hello World"))
  fmt.Println("Hello World"[1])
  fmt.Println("Hello " + "World")
}
cs


1
2
3
4
~/go/src/golang-book/chapter2# go run main.go
11
101
Hello World
cs

주의할 점은 다음과 같다. 스페이스는 하나의 문자로 간주되므로, 문자열의 길이는 10이 아닌 11이 된다. 그리고 라인 8의 Hello 는 "Hello"가 아니라 "Hello "가 된다. 

문자열 인덱스는 1이 아니라 0에서부터 시작된다. [1]은 1번째가 아닌 2번째 원소를 가리킨다. 그리고 2번째 원소인 e가 아니라 101이 반환되는 것을 볼 수 있는데, 그 이유는 문자는 바이트로 표현되기 때문이다. 

 "Hello World"1와 같이 보여주면 이해가 빠를 것이다. 이는 다음과 같은 의미이다. 

  • “The string Hello World sub 1”
  • “The string Hello World at 1”
  • “The second character of the string Hello World”.

결합은 더하기와 같은 + 기호를 사용한다. Go 컴파일러는 2개의인수의 타입에 기반하여 + 의 의미를 해석한다. 2개의 인수가 모두 문자열인 경우 더하기(addition)의 의미가 아닌 결합(concatenation) 연산자로 작동한다.