- [golang]Go언어 문자열 목차
| Golang 문자열
- Go는 기본적으로 utf8 문자열입니다.
- 문자열은 배열이라고 생각하시면 편합니다. 즉 문자열은 배열로 취급합니다.
- 문자 char type은 존재하지 않는다. ( rune (int32) 로 문자 코드 값으로 표현합니다.)
- 문자열 : "" (큰따옴표) 문자 : '' (작은따옴표)로 사용합니다.
( 하지만 경로등을 나타내는 문자열에서는 escape를 사용해야하는데 이런 귀찮은 행동을 방지하기 위하여 ``(백틱)을 사용하면 됩니다. )
- escape : \\ , \' , \" , \b(백스페이스), \f(쪽 바꿈), \n (줄 바꿈) , \r(복귀), \t( 탭 ) ...
ex)
var str1 string = "c:\\go_study\\src\\" // -> c:\go_study\src\
//백틱 태그 사용
str2 := `c:\go_study\src\`
| len
문법
var str3 string = "hello !z"
var str4 string = "안녕하세요."
len(str3) // 8
len(str4) // 한글 : 3 byte, 나머지 1 byte = 16
- Go에서 len은 byte 수를 구해준다.
(한글 :3 byte & 나머지는 1 byte (공백 포함 ) )
| 실제 문자열 길이를 구하는 방법 2가지
1. 함수 ( unicode/utf8 ) 패키지의 utf8.RuneCountInString 사용
fmt.Print("ex : ", utf8.RuneCountInString(구할 문자열))
2. len이용
//len으로 길이를 구하는 방법
fmt.Println("ex : ", len([]rune(문자열)))
| 문자열 한 글자 씩 출력하기
println 사용
func main(){
var str1 string ="Golang"
//해당하는 아스키 코드가 나옵니다. ex) 71 111 108 ...
fmt.Println("ex1 : ", str1[0], str1[1], str[2] ... )
}
printf 사용
// %c를 이용한 문자열 한 글자 씩 표현
fmt.Printf("ex:%c %c %c %c %c ", str1[0],str1[1],str1[2],str1[3] ... );
//결과 : G o l a n g
주의 !
printf를 사용하면서 포메터 형식으로 배열을 출력하려 하면 한글이 깨집니다.
( 단, 영어로는 정상 출력이 되지만, 한글로 표시된 문자열을 출력하는 경우 깨지게됩니다.)
한글 깨짐 해결 ( 문자열 길이를 이용 )
constStr := []rune(str3)
fmt.Printf("ex : , %c %c %c %c %c \n ", constStr[0], constStr[1], constStr[2] ... )
| 반복문으로 string형을 순회하는 방법
var str2 string = "Golang"
for i, char := range str2 {
fmt.Printf("ex : %c, (%d) \t ",char, i)
}
// G(0) o(1) l(2) a(3) n(4) g(5)
참고링크 : http://pyrasis.com/book/GoForTheReallyImpatient/Unit45/02
! ! ! 이번 글에서 제일 중요한 점 ! ! !
1.문자열은 배열로 취급한다.
2.한글을 깨지지 않게 출력하는 방법 "[]rune()" 형태 생성자로 string 변수를 넣어준다.
3.문자열은 배열로 취급되기 때문에 for (반복문)에서 취급할 수 있다.
4.따라서 index로 접근이 가능하고 index로 접근하면 아스키코드(정수형)로 출력된다.
5.실질적인 문자를 출력하기 위해서는 printf의 "%c"를 사용하여야 한다.
'golang' 카테고리의 다른 글
[golang]Golang 배열(Array) 다루기 (0) | 2021.07.04 |
---|---|
[golang]Golang 문자열 연산과 결합 (0) | 2021.07.04 |
[golang]문법 정리 (0) | 2021.07.01 |
[golang]Go언어 반복문(for문) (0) | 2021.07.01 |
[golang]Go언어 실행 (0) | 2021.07.01 |