Go 자주 쓰이는 형변환

우몽가·2024년 8월 19일

정수(int) ↔ 문자열(string)

🔷 intstring으로

1. strconv.Itoa 사용

  • 표준 라이브러리 strconv 패키지에서 제공하는 Itoa 함수를 이용하여 변환
num := 123
str := strconv.Itoa(num)

2. fmt.Sprintf 사용

  • 표준 라이브러리 fmt 패키지에서 제공하는 Sprintf 함수를 이용해 포맷팅된 문자열로 변환
num := 123
str := fmt.Sprintf("%d", num)

int뿐 아니라 다양한 데이터 타입을 문자열로 변환할 때 유연하게 사용할 수 있다.

3. strconv.FormatInt 사용

  • int64를 문자열로 변환할 때 사용하고, 큰 정수나 다른 진법으로 변환할 때 유용하다.
num := int64(123)
str := strconv.FormatInt(num, 10)

🔷 stringint

1. strconv.Atoi 사용

  • strconv 패키지에서 제공하는 Atoi 함수를 이용하여 변환
str := "123"
num, err := strconv.Atoi(str)

2. strconv.ParseInt 사용

  • 다른 진법으로 변환해야할 때 유용
str := "123"
num, err := strconv.ParseInt(str, 10, 0)
num64, err := strconv.ParseInt(str, 10, 64)
// 세 번째 인자는 결과값의 비트 크기이고, `0`을 넣으면 기본 크기인 `int`로 변환된다.

정수(int) ↔ 부동소수점(float64)

🔷 intfloat64

  • 타입 캐스팅
iNum := 123
fNum := float64(iNum) 

🔷 float64int

  • 타입 캐스팅
fNum := 12.3
iNum := int(fNum)

주의사항

  • 소수점 이하의 값은 버려진다(내림 처리).
  • int 범위를 초과하는 큰 float64 값을 int로 변환하면 예상치 못한 값이 나올 수 있다;

Byte Stream ↔ string

🔷 string[]byte

  • 타입 캐스팅
str := "hello there!"
byteStream := []byte(str)

각 문자는 아스키 코드나 UTF-8 코드 포인트에 해당하는 바이트 값으로 변환된다.

🔷 []bytestring으로

  • 타입 캐스팅
byteStream := []byte{72, 101, 108, 108, 111}
str := string(byteStream)     // 직관적이고 간결한 변환
str := string(byteStream[:])  // 슬라이스 표현식을 사용

Unix Timestamp ↔ RFC3339

🔷 Unix Timestamp를 RFC3339 형식으로

  • time 패키지 사용
timestamp := int64(1231231234)
t := time.Unix(timestamp, 0).UTC().Format(time.RFC3339)
fmt.Println(t)	// 2009-01-06T08:40:34Z
t := time.Unix(timestamp, 0).Format(time.RFC3339)
fmt.Println(t)  // 2009-01-06T17:40:34+09:00

🔷 RFC3339를 Unix Timestamp로

  • time 패키지 사용
rfcTime := "2009-01-06T08:40:34Z"
t, err := time.Parse(time.RFC3339, rfcTime)	// time.Time 객체로 변환
if err != nil {
	// 에러 처리 ...
}
timestamp := t.Unix()
profile
우몽가의 노트

0개의 댓글