- Type Switch 공부하면서 나온 ERROR이다.
단순히 생각해서 Switch문의 변수의 Type을 확인한다고 생각해서 아래와 같이 간단하게 Test를 진행해보았는데 value v
가 Interface Value가 아니라고 한다.
package main
func main() {
var v int = 10
switch v.(type) {
case int:
println("int")
case bool:
println("bool")
case string:
println("string")
default:
println("unknown")
}
}
func do(i interface()) {}
는,
-> 빈 인터페이스(empty interface)를 파라미터로하는 함수를 정의한다. 이 함수는 입력받는 Parameter Type에 따라 각각의 연산이 내장되어있다.
switch v := i.(type)
에서는,
-> type assertion을 사용하였다. 즉 위의 처음 에러가 생겼던 code에서 non-interface value라고 볼 수 있는 이유는 모든 type을 설명할 수 있는 빈 인터페이스로 변수를 사용하지 않아서 생기는 오류였다. (type assertion은 인터페이스를 대상으로 한다라고 생각하면 이해하기 쉽다.)
구글링하다가 Golang offcial docs에서 제공하는 "A tour of Go" 에서 그 해답을 알 수 있었다. 아래의 code에서는 크게 type-switch, empty interface, type-assertion의 사용을 유의깊게 보면 된다!
type-switch.go
package main
import "fmt"
func do(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("Twice %v is %v\n", v, v*2)
case string:
fmt.Printf("%q is %v bytes long\n", v, len(v))
default:
fmt.Printf("I don't know about type %T!\n", v)
}
}
func main() {
do(21)
do("hello")
do(true)
}
// 출력
Twice 21 is 42
"hello" is 5 bytes long
I don't know about type bool!
*추가적으로 main함수에 empty interface를 둘 수 없었다. 이에 대해서는 조금 더 공부해봐야겠다.
'LANG > Golang' 카테고리의 다른 글
[Golang][Algo] Python으로 코딩하고 Go로 한번 더 풀기 -2- Trapping Rain Water (0) | 2021.03.22 |
---|---|
[Golang] Sqrt(Newton's Method)와 같이 Go언어 Custom Error처리 이해하기 (0) | 2021.03.16 |
[Golang] 헷갈리는 Type assertion 이해하기 (0) | 2021.03.16 |