type

作者: 沐晓黑 | 来源:发表于2018-07-18 14:15 被阅读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)
    }
    

    相关文章

      网友评论

          本文标题:type

          本文链接:https://www.haomeiwen.com/subject/wcznpftx.html