8. 类型声明,方法,接口

来源:互联网 发布:天下霸唱抄袭证据知乎 编辑:程序博客网 时间:2024/05/16 18:43
1.内置类型2.引用类型3.结构类型4.嵌入类型

1.用户自定义类型
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

package mainimport (    "fmt")type user struct {    name string    email string    ext int    private bool}func main() {    var a int    a = 100    fmt.Println(a)    var bill user     lisa := user {        name : "lisa",        email : "184200@qq.com",        ext : 123,        private : true,    }    fmt.Println(lisa)}
package mainimport (    "fmt")type admin struct {    person user    level string}type user struct {    name string    email string    ext int    private bool}func main() {    fred := admin {        person : user {            name : "Lisa",            email : "18@qq.com",            ext : 123,            private : true,        },        level : "super",    }    fmt.Println(fred)}

type Duration int64 // 基于 int64 声明一个新类型,相当于 c 语言 typedef,但不是一个类型func main() {    var dur Duration    dur = int64(1000) // 报错,编译器不会对不同类型的值做隐式转换    fmt.Println(dur)}

这里写图片描述

package mainimport (    "fmt")type Duration int64func main() {    var dur Duration    //报错:.\hello.go:11: cannot use int64(1000) (type int64) as type Duration in assignment    dur = int64(1000)    fmt.Println(dur)}

  1. 方法
    这里写图片描述
package mainimport "fmt"type user struct {    name string    email string}func (u user) notify() {    fmt.Printf("Sending User Email To %s<%s>\n", u.email,u.email)}func (u *user) change(email string) {    u.email = email}func main() {    //user 类型的值可以用来调用    //使用值接收者声明的方法    bill := user{"Bill", "bill@qq.com"}    bill.notify()    //使用值接收者声明的方法    //使用值接收者声明的方法    lisa := &user{"Lisa", "lisa@qq.com"}    lisa.notify() // (*lisa).notify() 编译器转换的    //user 类型的值可以用来调用    //使用指针接收者声明的方法    bill.change("bill@11111111111111.com") // (&bill).changeEmail ("bill@newdomain.com")    bill.notify()}

这里写图片描述

值接收者:
这里写图片描述
这里写图片描述
这里写图片描述

指针接收者:
这里写图片描述
这里写图片描述
这里写图片描述


3.接口
这里写图片描述
这里写图片描述
这里写图片描述

package mainimport (    "fmt")type notifier interface {    notify()}type user struct {    name string    email string}func (u *user) notify() {    fmt.Printf("Sending user email %s<%s>\n",    u.name,    u.email)}func main() {    u := user{"bill","bill@qq.com"}    // 报错,.\hello.go:24: cannot use u (type user) as type notifier in argument to sendNotification:    //user does not implement notifier (notify method has pointer receiver)    sendNotification(u)    //sendNotification(&u)}func sendNotification(n notifier) {    n.notify()}

这里写图片描述


4.公开或未公开标示符
这里写图片描述
这里写图片描述

原创粉丝点击