golang快速入门-17-golang的万能类型空接口interface{}和类型断言机制

golang的各种预置的变量类型int string等等都是实现了interface{}

 

package main

import "fmt"

//interface{}是万能数据类型
func myFunc(arg interface{}) {
    fmt.Println("myFunc is called...")
    fmt.Println(arg)

    //interface{} 改如何区分 此时引用的底层数据类型到底是什么?

    //给 interface{} 提供 “类型断言” 的机制
   //
arg.(string)相当于 ok=arg instanceOf string;value=arg;
    value, ok := arg.(string)
    if !ok {
        fmt.Println("arg is not string type")
    } else {
        fmt.Println("arg is string type, value = ", value)

        fmt.Printf("value type is %T\n", value)
    }
}

type Book struct {
    auth string
}

func main() {
    book := Book{"Golang"}

    myFunc(book)
    myFunc(100)
    myFunc("abc")
    myFunc(3.14)
}

 

posted @ 2021-03-18 01:53  从程序员到CTO  阅读(204)  评论(0)    收藏  举报
交流加我QQ:39667545