在Go语言中,interface 是一种非常重要的类型,它定义了一种对象的行为规范,而不关心对象的具体类型。当我们需要判断一个 interface 变量的动态类型时,可以使用类型断言(type assertion)或类型判断(type switch)。 1. 使用类型断言(Type Assertion) 类型断言的基本语法是: go value, ok := x.(T) 其中x 是inter...
packagemainimport"fmt"funcmain(){container:=[]interface{}{}m1:=make(map[int]string)m2:=make(map[string]string)m1[1]="1"m2["2"]="2"container=append(container,m1)container=append(container,m2)fmt.Println(container)for_,m:=range(container){switchm.(type){casemap[int]string:// 下面这行...
1.在Go语言中接口(interface)是一种类型,接口定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节; 2.相较于之前章节中讲到的那些具体类型(字符串、整型,数组,切片、map,结构体等)更注重"我是谁",接口类型更注重"我能做什么"的问题; 3.接口可以定义一组方法,但不需要实现,不需要方法体...
}//直接断言funcinterfaceAssert1(unknowinterface{})(retTypestring, valinterface{}){ val, ok := unknow.(string)ifok{return"string", val }else{return"not string",nil} }//反射funcinterfaceAssert2(unknowinterface{})(retType reflect.Type, val reflect.Value){ retType = reflect.TypeOf(unknow) val...
其中,interfaceValue表示接口值,type1表示第一个类型,type2表示第二个类型,default表示其他类型。在...
itab中inter 字段就是一个 接口类型: typeinterfacetypestruct{typ_typepkgpathnamemhdr[]imethod} _type 上文咱们已经解释过,pkgpath代表接口所在的包名,mhdr表示的接口方法。 itab中的 hash 的字段后面的注解已经说的很明白了,就是为了快速做类型判断的时候用的。空的4字节用于内存对齐。
空接口interface{} 就是终极抽象,什么方法都不用实现的接口,所有东西都是他的子集。也就是any=...
一种方法是我们可以判断一个interface的变量类型。判断的方法非常简单,我们在interface的变量后面用.(type)的方法来判断。它和map的key值判断一样,会返回一个值和bool类型的标记。我们可以通过这个标记判断这个类型是否正确。 ifv,ok:=a1.(int);ok{fmt.Println(v)} ...
if _,ok:=interface{}(s).(string);ok{ fmt.Println("ok") } switch v:=s.(type) { case string: fmt.Println(v) case int: strconv.Itoa(v) } fmt.Println(Demo()) } 判断container的类型 打印其中的元素之前,正确判断变量的类型,使用“类型断言”表达式。