Go에서 타입 변환 이해하기
Min-jun Kim
Dev Intern · Leapcell

Key Takeaways
- Go는 타입 안전성을 유지하기 위해 명시적인 타입 변환을 요구합니다.
- 문자열과 숫자 타입은 특수한 변환 함수가 필요합니다.
- 타입 단언은 인터페이스 변환에 사용됩니다.
Go 프로그래밍에서 타입 변환 (다른 언어에서는 종종 "캐스팅"이라고 함)은 값을 한 데이터 타입에서 다른 데이터 타입으로 변환하는 데 필수적입니다. Go는 타입 안전성을 강조하므로, 서로 다른 데이터 타입을 다룰 때 명시적인 타입 변환이 필요합니다.
기본 타입 변환
정수와 float와 같은 기본 타입 간에 변환하려면 다음 구문을 사용할 수 있습니다.
package main import ( "fmt" ) func main() { var i int = 42 var f float64 = float64(i) var u uint = uint(f) fmt.Println(i, f, u) }
이 예제에서 정수 i
는 float64 f
로, 그 다음에는 부호 없는 정수 u
로 변환됩니다. 각 변환은 타입 안전성을 보장하기 위해 명시적인 타입 변환이 필요합니다.
문자열 변환
문자열과 다른 타입 간의 변환에는 특정 함수가 필요합니다.
-
숫자 타입을 문자열로 변환하려면
fmt.Sprintf
또는strconv.Itoa
(정수의 경우)를 사용합니다.package main import ( "fmt" "strconv" ) func main() { var i int = 42 var s1 string = strconv.Itoa(i) var s2 string = fmt.Sprintf("%d", i) fmt.Println(s1, s2) }
-
문자열을 숫자 타입으로 변환하려면
strconv.Atoi
(정수의 경우) 또는strconv.ParseFloat
과 같은 함수를 사용합니다.package main import ( "fmt" "strconv" ) func main() { var s string = "42" i, err := strconv.Atoi(s) if err != nil { fmt.Println(err) } else { fmt.Println(i) } }
인터페이스 변환
Go에서 빈 인터페이스 interface{}
는 모든 타입의 값을 담을 수 있습니다. 원래 값을 검색하려면 타입 단언을 수행해야 합니다.
package main import ( "fmt" ) func main() { var i interface{} = 42 if v, ok := i.(int); ok { fmt.Println(v) } else { fmt.Println("타입 단언 실패") } }
여기서 타입 단언 i.(int)
는 i
가 int
를 담고 있는지 확인합니다. 그렇다면 v
에 값이 할당되고 ok
는 true가 됩니다. 그렇지 않으면 ok
는 false가 되고 단언은 정상적으로 실패합니다.
포인터 변환
Go는 동일한 기본 타입을 갖는 타입 간의 포인터 변환을 허용합니다.
package main import ( "fmt" ) type MyInt int func main() { var i int = 42 var p *int = &i var mp *MyInt = (*MyInt)(p) fmt.Println(*p, *mp) }
이 경우 MyInt
는 int
를 기본 타입으로 갖는 정의된 타입입니다. int
에 대한 포인터는 MyInt
에 대한 포인터로 변환될 수 있으며 그 반대도 마찬가지입니다.
결론
Go의 타입 변환은 타입 안전성과 명확성을 유지하기 위해 명시적인 구문을 필요로 합니다. 이러한 변환을 수행하는 방법을 이해하는 것은 효과적인 Go 프로그래밍에 매우 중요합니다.
FAQs
Go는 예기치 않은 동작과 오류를 방지하기 위해 타입 안전성을 강화합니다.
간단한 경우에는 strconv.Atoi
를 사용하고, 더 많은 제어가 필요한 경우에는 strconv.ParseInt
를 사용하세요.
적절하게 처리되지 않으면 런타임 패닉이 발생합니다. ok
패턴을 사용하면 이를 방지할 수 있습니다.
Go 프로젝트 호스팅을 위한 최고의 선택, Leapcell입니다.
Leapcell은 웹 호스팅, 비동기 작업 및 Redis를 위한 차세대 서버리스 플랫폼입니다.
다국어 지원
- Node.js, Python, Go 또는 Rust로 개발하세요.
무제한 프로젝트를 무료로 배포
- 사용량에 대해서만 지불하세요. 요청이나 요금이 없습니다.
타의 추종을 불허하는 비용 효율성
- 유휴 요금 없이 사용량에 따라 지불합니다.
- 예: $25는 평균 응답 시간 60ms에서 694만 건의 요청을 지원합니다.
간소화된 개발자 경험
- 간편한 설정을 위한 직관적인 UI。
- 완전 자동화된 CI/CD 파이프라인 및 GitOps 통합。
- 실행 가능한 통찰력을 위한 실시간 메트릭 및 로깅。
손쉬운 확장성과 고성능
- 고도의 동시성을 쉽게 처리할 수 있도록 자동 확장。
- 운영 오버헤드가 제로입니다. 구축에만 집중하세요.
설명서에서 자세히 알아보세요!
X에서 팔로우하세요: @LeapcellHQ