golang 인터페이스interface {}, 단언, switch type

2756 단어 golangbasic
interface {} 모든 종류의 대상 값을 받아들여 interface {} 대형 데이터 형식을 얻을 수 있으며 단언이나 switch type을 사용하여 실현할 수 있습니다
// Assertion project main.go
package main

import (
    "fmt"
)

type Bag struct {
    Key string
}

type Bag2 struct {
    Key int
}

func main() {
    var b1 interface{}
    var b2 interface{}

    b1 = Bag{Key: "1"}
    b2 = Bag2{Key: 0}
    // interface{} 
    // :
    { // Bag    0
        b, ok := b1.(Bag)
        fmt.Println("Bag    :", ok, " ", b)
    }
    { // Bag2    0
        b, ok := b2.(Bag2)
        fmt.Println("Bag2 :", ok, " ", b)
    }
    // :
    switch v := b1.(type) { //v b1  Bag 
    case Bag:
        fmt.Println("b1.(type):", "Bag", v)
    case Bag2:
        fmt.Println("b1.(type):", "Bag2", v)
    default:
        fmt.Println("b1.(type):", "other", v)
    }

}

단언: 일반적으로interface에 사용된 대상의 데이터 형식으로 호출된 후 자동으로 인터페이스를 상응하는 대상으로 변환하고 문법구조 인터페이스 대상(obj), 저장된 데이터 형식(string), v,ok:=obj.(string), 상응하는 대상 ok는 진실이고 v는 상응하는 대상 및 데이터입니다.
switch type: 알고 있거나 알 수 없는 대상 데이터 형식은 모두 가능합니다. b1.(type)는 switch와 함께 사용해야 하며 이 문장을 단독으로 실행할 수 없습니다.switch v:= b1.(type) {//b1은interface 대상, v는 해당 대상 및 데이터case Bag://유형이 Bag일 때 fmt.Println("b1.(type):", "Bag", "Bag", v)case Bag2://유형이 Bag2일 때 fmt.Println("b1.(type):", "Bag2", v)default://유형이 다른 유형일 때 fmt.Println("b1.(type):", "otv):

좋은 웹페이지 즐겨찾기