go语言实现继承,重写

以实际遇到过得情况为例,用户的数据结构中有类型为日期类型time.Time的createdAt属性,经过反复的格式化处理,在页面上输出的还是2017-05-31 06:49:09 +0800 CST这种格式,所以猜想日期类型是不能直接输出2017-05-31 06:49:09格式的,只能输出格式化后的字符串类型。于是利用go的继承将User的数据结构继承都UserPojo里,再单独对createdAt进行修改,重写为string类型。

package main

import "fmt"
import "time"

type User struct {
    name string
    age int
    createdAt time.Time
}

type UserPojo struct {
    User
    createdAt string
}

func (user *User) getName(){
    fmt.Println("获取用户名:", user.name)
}

func main()  {
    user := new(User)
    user.name="张三"
    user.age=26
    user.createdAt=time.Now()
    fmt.Println("user.createdAt",user.createdAt)

    userpj := new(UserPojo)
    userpj.User = *user
    userpj.createdAt = user.createdAt.Format("2006-01-02 15:04:05")
    fmt.Println("userpj.createdAt",userpj.createdAt)
}

//输出
//user.createdAt 2017-06-17 10:39:29.5294 +0800 CST
//userpj.createdAt 2017-06-17 10:39:29

在go的继承中有一点需要注意,使用结构体struct字面量赋值会出现找不到属性的问题:

https://hopefully-img.yuedun.wang/go_extends_20180328182436.pn

# command-line-arguments
.\test.go:17:7: unknown field 'Name' in struct literal of type Cat
.\test.go:18:8: unknown field 'Color' in struct literal of type Cat

换一种方式还是有问题:

https://hopefully-img.yuedun.wang/go_extends_20180328183611.png

# command-line-arguments
.\test.go:17:9: mixture of field:value and value initializers

这个错误的意思是“属性:值”和“值”两种赋值方法不能混合使用,Cat继承Animal的时候只有“Animal”类型,没有显式的属性名。

https://hopefully-img.yuedun.wang/go_extends_20180328184430.png

全部省略属性名的方式则没问题,另外一种则是先声明变量,再对变量属性赋值:

user := new(User)
user.name="张三"