서론
Go 언어에서 interface{} 타입은 모든 타입을 담을 수 있어 매우 유연하게 사용된다. 그러나 interface{}에 담긴 값의 원래 타입을 알아내고 처리할 때는 주의가 필요하다. 잘못된 타입 변환 시 panic이 발생할 수 있기 때문에 안전하게 타입을 다루는 방법이 중요하다. Go 언어에서 interface{} 타입의 값을 다룰 때 타입 스위치(type switch)를 사용하면 다양한 타입을 안전하게 처리할 수 있다. 타입 스위치는 값이 어떤 타입인지를 확인하고 각 타입에 맞는 처리를 할 수 있게 도와준다.
타입 스위치 예제
package main
import "fmt"
func do(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("Type is int: %d * 2 = %d\n", v, v*2)
case string:
fmt.Printf("Type is string: %s (%d)\n", v, len(v))
default:
fmt.Printf("Unknown type: %T\n", v)
}
}
func main() {
do(1024)
do("Jae-Sung")
do(true)
}
출력 결과
Type is int: 1024 * 2 = 2048
Type is string: Jae-Sung (8)
Unknown type: bool
이 예제에서 do 함수는 interface{} 타입의 값을 매개변수로 받는다. 그 후 타입 스위치를 사용하여 값의 타입에 맞는 처리를 한다.
- interface{} 값이 int 타입인 경우: v는 int 타입으로 선언되어 v*2와 같은 연산이 가능하다.
- interface{} 값이 string 타입인 경우: v는 string 타입으로 선언되어 문자열 길이를 구하는 등의 처리가 가능하다.
- interface{} 값이 int나 string이 아닌 타입인 경우: v는 interface{} 타입으로 선언된다.
타입 스위치를 사용하면 다양한 타입을 안전하게 처리할 수 있으며 예상치 못한 타입에 대해서도 처리할 수 있다.
'Language > Go' 카테고리의 다른 글
[golang] fasthttp! 속도를 뒤집어 놓으셨다 (1) | 2024.11.26 |
---|---|
[golang] panic 없이 interface{} 타입 변환하기 (0) | 2024.11.24 |
[golang] Base64 인코딩과 디코딩 처리하기 (0) | 2024.11.23 |
[golang] 런타임에 콜 스택 출력하기 (1) | 2024.11.22 |
[golang] panic과 recover로 try-catch 따라 하기 (1) | 2024.11.21 |