인터페이스: Type assertion
인터페이스를 이용하여 메소드가 아닌 일반 변수에 할당하며 변수에 정의된 타입들에 대해 명확히 구분할 수 있다.
Var 변수명 interface{} 로 정의하면 일반 변수정의 타입들도 전달할 수 있다.
//구조체 정의
var a BB = BB{X:10}
//Type assertion 정의
var value interface{}
// 할당
value = a
//value.(타입)
fmt.Println(" type assertion ", value.(BB)) //출력값 {10}
리턴값을 interface{} 즉 type assertion 을 처리하도록 정의
func weird(i int) interface{} {
if i < 0 {
return "negative"
}
return i
}
func main() {
var i = 42
if w, ok := weird(7).(int); ok {
i += w
}
if w, ok := weird(-100).(int); ok {
i += w
}
fmt.Println("i =", i)
}
//결과값은 49
Type Assertion을 이용하여 타입값들을 확인이 필요한 경우
var i = 49
var myInterface interface{}
myInterface = i
switch v := myInterface.(type) {
case int:
// v is an int here, so e.g. v + 1 is possible.
fmt.Printf("Integer: %v", v)
case float64:
// v is a float64 here, so e.g. v + 1.0 is possible.
fmt.Printf("Float64: %v", v)
case string:
// v is a string here, so e.g. v + " Yeah!" is possible.
fmt.Printf("String: %v", v)
default:
// And here I'm feeling dumb. ;)
fmt.Printf("I don't know, ask stackoverflow.")
}
//결과값
Integer: 49
댓글
댓글 쓰기