string
package main
import "fmt"
import "unicode/utf8"
func main() {
//문자열
//큰따옴표 "" , 백스쿼트 `` 작성
//Golang : 문자 char 타입 존재하지 않음 -> rune(int32)로 문자 코드 값으로 표현
//문자 : 작은따옴표 '' 로 작성
//자주 사용 하는 escape : \\, \', \", \a(콘솔벨), \b(백스페이스), \f(쪽바꿈), \n(줄바꿈), \r(복귀), \t(탭)
//예제1
var str1 string = "c:\\go_study\\src\\"
str2 := `c:\go_study\src\`
fmt.Println("ex1 : ", str1, "\t", "ok1")
fmt.Println("ex1 : ", str2, "\t", "ok2")
//예제2
var str3 string = "Hello, world!"
var str4 string = "안녕하세요"
var str5 string = "\ud55c\uae00" // 한글 유니코드(4자리는 소문자 -> u)
var str6 string = "\U0000d55c\U0000ae00" // 한글 유니코드(8자리는 소문자 -> U)
var str7 string = "\xed\x95\x9c\xea\xb8\x80" // UTF-8 인코딩 바이트 코드
fmt.Println()
fmt.Println("ex2 : ", str3)
fmt.Println("ex2 : ", str4)
fmt.Println("ex2 : ", str5)
fmt.Println("ex2 : ", str6)
fmt.Println("ex2 : ", str7)
fmt.Println()
//예제3
//길이(바이트수)
fmt.Println("ex3 : ", len(str3))
fmt.Println("ex3 : ", len(str4))
fmt.Println()
//예제4
//길이(실제 길이)
fmt.Println("ex4 : ", utf8.RuneCountInString(str3))
fmt.Println("ex4 : ", utf8.RuneCountInString(str4))
fmt.Println("ex4 : ", len([]rune(str4)))
}
package main
import "fmt"
func main() {
//문자열 표현
//문자열 : UTF-8 인코딩 (유니코드 문자 집합) -> 바이트 수 주의
//예제1
var str1 string = "Golang"
var str2 string = "World"
var str3 string = "고프로그래밍"
fmt.Println("ex1 : ", str1[0], str1[1], str1[2], str1[3], str1[4], str1[5])
fmt.Println("ex1 : ", str2[0], str2[1], str2[2], str2[3], str2[4])
fmt.Println("ex1 : ", str3[0], str3[1], str3[2], str3[3], str3[4], str3[5])
fmt.Println("ex1 : ", str3[0], str3[1], str3[2], str3[3], str2[4], str3[5], str3[len(str1)-2])
//예제2
fmt.Printf("ex2 : %c %c %c %c %c %c\n", str1[0], str1[1], str1[2], str1[3], str1[4], str1[5])
fmt.Printf("ex2 : %c %c %c %c %c\n", str2[0], str2[1], str2[2], str2[3], str2[4])
fmt.Printf("ex2 : %c %c %c %c %c %c\n", str3[0], str3[1], str3[2], str3[3], str3[4], str3[5]) //문제 발생
conStr := []rune(str3)
fmt.Printf("ex2 : %c %c %c %c %c %c\n", conStr[0], conStr[1], conStr[2], conStr[3], conStr[4], conStr[5])
//예제3
for i, char := range str1 {
fmt.Printf("ex3 : %c(%d)\t", char, i)
}
fmt.Println()
for i, char := range str2 {
fmt.Printf("ex3 : %c(%d)\t", char, i)
}
}
string 연산
package main
import "fmt"
func main() {
//문자열 연산
//추출, 비교, 조합(결합)
//예제1(추출)
var str1 string = "Golang"
var str2 string = "World"
fmt.Println("ex1 : ", str1[0:2], str1[0])
fmt.Println("ex1 : ", str2[3:], str2[0])
fmt.Println("ex1 : ", str2[:4], str2[0])
fmt.Println("ex1 : ", str1[1:3])
}
package main
import "fmt"
func main() {
//예제1(비교)
str1 := "Golang"
str2 := "World"
fmt.Println("ex1 : ", str1 == str2) //바이트로 비교
fmt.Println("ex1 : ", str1 != str2)
fmt.Println("ex1 : ", str1 > str2)
fmt.Println("ex1 : ", str1 < str2)
}
package main
import (
"fmt"
"strings"
)
func main() {
//문자열 조합은 한 번 생성 후 수정 불가 이유로 새로 계속해서 생성 된다.
//효율적 사용을 위해서 되도록 join 함수 사용 추천
//예제1(결합 : 일반연산)
str1 := "Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to " +
"write programs that get the most out of multicore and networked machines, while its novel " +
"type system enables flexible and modular program construction. Go compiles quickly to machine " +
"code yet has the convenience of garbage collection and the power of run-time reflection."
str2 := "It's a fast, statically typed, compiled language that feels like a dynamically typed, interpreted language."
fmt.Println("ex1 : ", str1+str2)
//예제2(결합 : Join)
strSet := []string{} //슬라이스 선언
strSet = append(strSet, str1)
strSet = append(strSet, str2)
fmt.Println("ex2 : ", strings.Join(strSet, ""))
}