判断变量类型
package mainimport ("fmt"
)var container = []string{"zero", "one", "two"}func main(){container := map[int]string{0: "zero", 1: "one", 2: "two"}// 方式 1// interface{}(container):将 container 变量转换为空接口// .([]string):判断 container 的类型是否为切片类型 []string// 返回值 value:类型转换后的值,// 返回值 ok:断言是否成功_, ok1 := interface{}(container).([]string)_, ok2 := interface{}(container).(map[int]string)if(!(ok1 || ok2)){fmt.Printf("Error: unsupported container type: %T\n", container)return}fmt.Printf("The element is %q. (container type: %T)\n", container[1], container)// 方式 2elem, err := getElement(container)if err != nil {fmt.Printf("Error: %s\n", err)return}fmt.Printf("The element is %q. (container type: %T)\n", elem, container)
}func getElement(containerI interface{})(elem string, err error){switch t := containerI.(type){case []string:elem = t[1]case map[int]string:elem = t[1]default:err = fmt.Errorf("unsupported container type: %T", containerI)return}return
}
别名类型
package mainfunc main(){type MyString1 = string // MyString1 是 string 类型的别名类型type MyString2 string // 没有等号,MyString2 与 string 类型不同str := "BCD"myStr1 := MyString1(str) // 将 str 转换为类型 MyStringmyStr2 := MyString2(str)myStr1 = strmyStr2 = str // 这里的赋值不合法,会引发编译错误。
}