프로젝트를 진행하면서 가장 많이 사용하는 데이터 타입 중 하나는 문자열입니다. 예를 들어, API를 작성할 때 클라이언트로부터 받은 요청 대부분이 문자열일 것입니다. 여기서는 Go 언어에서 문자열을 다루는 방법에 대해 간단히 정리해보겠습니다.
문자열의 형식화 출력
package main
import "fmt"
func main() {
fmt.Println("안녕하세요")
}
위 코드는 매우 기본적인 출력입니다. 좀 더 복잡한 내용을 출력해봅시다.
package main
import "fmt"
func main() {
fmt.Printf("안녕하세요, 제 이름은 %v입니다.", "Alice")
}
출력하려는 문자열에 특정 값을 삽입하려면 형식화된 출력을 사용해야 합니다. 아래 표는 주요 형식화 동사와 그 기능을 나타냅니다:
| 동사 | 설명 |
|---|---|
| %v | 값의 원래 형태로 출력 |
| %+v | 구조체 필드 이름과 값 모두 출력 |
| %#v | Go 언어 문법 형태로 값 출력 |
| %T | Go 언어 문법 형태로 타입과 값 출력 |
| %% | 퍼센트 기호 자체 출력 |
| %b | 정수를 2진수로 출력 |
| %o | 정수를 8진수로 출력 |
| %d | 정수를 10진수로 출력 |
| %x | 정수를 소문자 16진수로 출력 |
| %X | 정수를 대문자 16진수로 출력 |
| %U | 유니코드 문자 출력 |
| %f | 부동소수점 숫자 출력 |
| %p | 포인터를 16진수로 출력 |
문자열의 타입 변환
클라이언트로부터 받은 데이터를 처리하기 위해서는 종종 타입 변환이 필요합니다. 예를 들어, 문자열을 int 또는 int64로 변환하는 경우를 살펴보겠습니다.
package main
import (
"fmt"
"strconv"
)
func main() {
strToInt := "1"
intVal := 2
// 문자열을 int로 변환
convertedInt, err := strconv.Atoi(strToInt)
if err != nil {
fmt.Errorf("타입 변환 오류: %v", err)
}
fmt.Println(intVal + convertedInt)
}
이제 string을 int64로 변환하는 예제를 보겠습니다:
package main
import (
"fmt"
"strconv"
)
func main() {
strToInt64 := "1"
// 문자열을 int64로 변환
convertedInt64, err := strconv.ParseInt(strToInt64, 10, 64)
// int64를 문자열로 변환
convertedStr := strconv.FormatInt(convertedInt64, 10)
convertedBackInt64, err := strconv.ParseInt(convertedStr, 10, 64)
fmt.Println(convertedBackInt64 + convertedInt64)
}
문자열의 암호화 및 복호화
데이터 전송 시 암호화는 필수적입니다. 예를 들어, Base64와 MD5 같은 일반적인 암호화 알고리즘을 사용할 수 있습니다.
Base64
package main
import (
"fmt"
"encoding/base64"
)
func main() {
input := []byte("hello world")
encodedString := base64.StdEncoding.EncodeToString(input)
fmt.Println(encodedString)
decodedBytes, err := base64.StdEncoding.DecodeString(encodedString)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(decodedBytes))
}
MD5
package main
import (
"fmt"
"crypto/md5"
)
func main() {
input := []byte("hello world")
hash := md5.Sum(input)
md5Str := fmt.Sprintf("%x", hash) // []byte를 16진수 문자열로 변환
fmt.Println(md5Str)
}