3
다음 Go 코드가 작동하는 이유는 무엇입니까?Go 인터페이스 {내장형과 직접 비교 : 왜 작동합니까?
즉, f
및 b
의 종류는 interface{}
(그리고 bool
, int
또는 string
의되지 않음), 어떻게 그것이 가능 나를 멀리 하지 주조 또는으로 얻을입니다 때문에 타입 주장에 f
및 b
을 3 개의 각 if
진술?
package main
import (
"fmt"
"reflect"
)
func foop(p map[string]interface{}) {
p["foo"] = true
}
func barp(p map[string]interface{}) {
p["bar"] = 17
}
func foop2(p map[string]interface{}) {
p["foo"] = "blah"
}
func main() {
p := make(map[string]interface{})
fmt.Printf("%v\n", p)
foop(p)
barp(p)
f := p["foo"]
b := p["bar"]
fmt.Printf("f: %T\n", f)
if f == true {
fmt.Println("ok")
}
fmt.Printf("b: %T\n", b)
if b == 17 {
fmt.Println("ok")
}
foop2(p)
f = p["foo"]
if f == "blah" {
fmt.Println("ok")
}
fmt.Printf("f: %T\n", f)
fmt.Printf("f: %s\n", reflect.TypeOf(f))
}
(이동 놀이터 : https://play.golang.org/p/kPi25yW6tF) 대부분의 이동 언어 문제와 마찬가지로