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字面量赋值会出现找不到属性的问题:
# 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
换一种方式还是有问题:
# command-line-arguments
.\test.go:17:9: mixture of field:value and value initializers
这个错误的意思是“属性:值”和“值”两种赋值方法不能混合使用,Cat继承Animal的时候只有“Animal”类型,没有显式的属性名。
全部省略属性名的方式则没问题,另外一种则是先声明变量,再对变量属性赋值:
user := new(User)
user.name="张三"