定义结构体
type user struct {
name string //后面不能有逗号
age int
}
func main() {
//结构体初始化,可以不设置全部字段值,初始化为默认值
u := user{
name: "test", //后面要加逗号
age: 20, //或者下面的}提到这儿来可以省略逗号
}
fmt.Println(u.name)
}
类型别名
使用类型别名定义出来的类型与原类型一样,即可以与原类型变量互相赋值,又拥有了原类型的所有方法集。给string类型取一个别名,别名名称是str:
type str = string
//结构体定义
type user struct {
name str
age int
}
可以针对新类型定义方法
func (mystr str) get(){
}
给类型别名新增方法,会添加到原类型方法集中;类型别名,只能对同一个包中的自定义类型产生作用。
类型定义
类型定义可以在原类型的基础上创造出新的类型,有些场合下可以使代码更加简洁。
// 定义一个接收一个字符串类型参数的函数类型
type handle func(str string)
类型查询
使用type进行类型查询时,只能在switch中使用,且使用类型查询的变量类型必须是interface{}。
func main() {
// 定义一个interface{}类型变量,并使用string类型值”abc“初始化
var a interface{} = "abc"
// 在switch中使用 变量名.(type) 查询变量是由哪个类型数据赋值。
switch v := a.(type) {
case string:
fmt.Println("字符串")
case int:
fmt.Println("整型")
default:
fmt.Println("其他类型", v)
}
}
定义接口类型
//接口定义
type User interface {
Learn()
Name() string
}
type user struct {
name string
age int
}
func (u user) Learn() {
println("learning")
}
func (u user) Name() string {
return u.name
}
var uu User
func main() {
// 实例化结构体,赋值给interface
uu = user{"lily", 20}
println(uu.Learn)
}
网友评论