2016-07-07 3 views
3

다음 Go 코드가 작동하는 이유는 무엇입니까?Go 인터페이스 {내장형과 직접 비교 : 왜 작동합니까?

즉, fb의 종류는 interface{} (그리고 bool, int 또는 string의되지 않음), 어떻게 그것이 가능 나를 멀리 하지 주조 또는으로 얻을입니다 때문에 타입 주장에 fb을 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) 대부분의 이동 언어 문제와 마찬가지로

답변

5

는 대답은 Comparison Operators에 특히 섹션 Go Programming Language Specification입니다.

형 X의 값을 비교하며, t는 동적 유형 인 경우에 X는 같은지 T. 구현 한 경우에, 비 - 인터페이스 타입 X의 값 x 인터페이스 타입 T의 값 t가 대등 X 및 t의 동일 동적 값은 x와 같습니다.

관련 문제