type

2018-07-18  本文已影响0人  沐晓黑

定义结构体

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)
}
上一篇下一篇

猜你喜欢

热点阅读