package main import "fmt" type Course struct { name string price int url string } type Printer interface { printInfo() string } func (c Course) printInfo() string { return "课程信息" } //func print(x interface{}){ // if v, ok := x.(int); ok{ // fmt.Printf("%d(整数)\n", v) // } // if s, ok := x.(string); ok { // fmt.Printf("%s(字符串)\n", s) // } // //牵扯到go的另一个默认的问题 // //fmt.Printf("%v\n", i) //} type AliOss struct { } type LocalFile struct { } func store(x interface{}) { switch v := x.(type) { case AliOss: //此处要做一些特殊的处理,我设置阿里云的权限问题 fmt.Println(v) case LocalFile: //检查路径的权限 fmt.Println(v) } } //判断类型 func print(x interface{}) { switch v := x.(type) { case string: fmt.Printf("%s(字符串)\n", v) case int: fmt.Printf("%d(整数)\n", v) } } func main() { //空接口 var i interface{} //空接口 //空接口可以类似于我们java和python中的object,等于下面的代码 //type Printer interface { //} //i = Course{} //fmt.Println(i) i = 10 print(i) i = "bobby" print(i) i = []string{"django", "scrapy"} print(i) //空接口的第一个用途 可以把任何类型都赋值给空接口变量 //2. 参数传递 //3. 空接口可以作为map的值 var teacherInfo = make(map[string]interface{}) teacherInfo["name"] = "bobby" teacherInfo["age"] = 18 teacherInfo["weight"] = 75.2 teacherInfo["courses"] = []string{"django", "scrapy", "sanic"} fmt.Printf("%v", teacherInfo) //类型断言 //接口的一个坑, 接口引入了 // 接口有一个默认的规范 接口的名称一般以 er结尾 //c := &Course{} //var c Printer = Course{} //c.printInfo() }