golang中没有继承的概念,这个struct属性上的继承,但是可以用匿名字段来模拟这个过程,方法上面的继承要使用接口.多态可以通过接口实现.可以看一下代码.

package main
import (
"encoding/json"
"fmt"
)
//抽象接口
type ISubUser interface {
Delete() string
Get() string
}
type User struct {
Lang string `json:"lang" gorm:"type:varchar(16)"` // 语言类型
ISubUser `json:"-"`
} type PermanentUser struct{
Key uint64 `json:"key123" gorm:"primary_key"` // 主键:索引
User
}
func (paste *PermanentUser) Delete() string {
return "PermanentUser is Delete"
//return db.Delete(&paste, "`key` = ?", paste.Key).Error
}
// 成员函数,访问
func (paste *PermanentUser) Get() string {
return "PermanentUser is Get"
//return db.Find(&paste, "`key` = ?", paste.Key).Error
} type TemporaryUser struct{
Key uint64 `json:"key456" gorm:"primary_key"` // 主键:索引
User
}
// 成员函数,删除
func (paste *TemporaryUser) Delete() string {
return "TemporaryUser is Delete"
//return db.Delete(&paste, "`key` = ?", paste.Key).Error
}
// 成员函数,查看
func (paste *TemporaryUser) Get() string {
return "TemporaryUser is Get"
//return db.Find(&paste, "`key` = ?", paste.Key).Error
} func testGetPolymorphism(u ISubUser){
fmt.Println(u.Get())
}
func testDetelePolymorphism(u ISubUser) {
fmt.Println(u.Delete())
} func main(){
//继承
Puser:=&PermanentUser{Key:123,User:User{Lang:"asd"}}
jsonstring,_:=json.Marshal(Puser)
fmt.Println(string(jsonstring))
fmt.Println()
Tuser:=&TemporaryUser{Key:456,User:User{Lang:"zxc"}}
jsonstring,_=json.Marshal(Tuser)
fmt.Println(string(jsonstring))
fmt.Println("-------------------------") //多态--上转型
testGetPolymorphism(Puser)
testDetelePolymorphism(Puser)
testGetPolymorphism(Tuser)
testDetelePolymorphism(Tuser)
fmt.Println("----------------------") //多态--下转型
user:=&User{Lang:"asd"}
user.ISubUser=&PermanentUser{}
fmt.Println(user.Get())
fmt.Println(user.Delete())
jsonstring,_=json.Marshal(user)
fmt.Println(string(jsonstring))
fmt.Println()
user.ISubUser=&TemporaryUser{}
fmt.Println(user.Get())
fmt.Println(user.Delete())
jsonstring,_=json.Marshal(user)
fmt.Println(string(jsonstring))
fmt.Println()
}

实例

有几点需要说明的

  1.初始化的时候一定要指明变量属性的字段,不然编译不通过,会一直说什么参数过少.

  2.父类所带接口要记得`json:"-"`,这样在转换从json的时候不会带着接口

  3.父类接口用于下转型,如果用不带下转型,那么可以不用写上.

最近比较忙,粗略的写了一下,以后再慢慢细化......

golang学习--go中'继承'和多态的更多相关文章

  1. python中继承和多态

    继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...

  2. [转]Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...

  3. c语言中继承和多态的简单实现

    C语言本身是不支持继承和多态的,但其实在 C 的世界里,有一套非常有名的面向对象的框架,用的也非常广,那就是 GObject,它是整个图形界面开发库 GTK 的基石,在IBM developerWor ...

  4. C#中继承和多态

    1.继承的概念 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能. 为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总 ...

  5. Java学习--封装、继承、多态

    接下来几天会根据http://www.cnblogs.com/chenssy/category/525010.html中讲解的java内容做个学习笔记,在此感谢一下这位大仙!! 一.封装 对于封装而言 ...

  6. 0022 Java学习笔记-面向对象-继承、多态、组合

    继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...

  7. Java编程思想学习笔记_2(继承和多态)

    静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...

  8. Java中继承与多态

    Java类的继承继承的语法结构:    [修饰符列表] class 子类名 extends 父类名{        类体;    }子类就是当前这个类,父类就是我们要复用的那个类java中只支持单继承 ...

  9. python学习日记(继承和多态)

    继承 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.S ...

随机推荐

  1. C#详解类型,变量与对象

    本节内容: 1.什么是类型(Type) 2.类型在C#语言中的作用 3.C#语言的类型系统 4.变量.对象与内存 1.什么是类型(type) 类型又名数据类型(Date Type),是数据在内存中存储 ...

  2. “Triplet network”三元组网络阅读笔记

    记录<DEEP METRIC LEARNING USING TRIPLET NETWORK>阅读笔记 文章总体内容: 作者在前人提出的多个特征提取方法的基础上提出Triplet netwo ...

  3. idea的tomcat实现热部署遇到的问题

    选择Deployment的时候,要选择exploded结尾的,否则不支持热部署

  4. Java基础(38)AbstractMap类

    AbstractMap类的子类有HashMap(其子类是LinkedHashMap).TreeMap.EnumMap.WeakHashMap和IdentityHashMap. 1.HashMap (1 ...

  5. JAVA中锁的解决方案

    前言 在上一节中,我们给大家介绍了什么是锁,以及锁的使用场景,我相信大家对锁的定义,以及锁的重要性都有了比较清晰的认识.在这一节中,我们会给大家继续做深入的介绍,介绍JAVA为我们提供的不同种类的锁. ...

  6. 优化 Git Commit Message

    目前很多项目都是通过 Git 进行管理的,Git 每次提交代码的过程中 提交说明 commit message 是必须的.但仅仅必须是不够的,好的提交说明可以帮助我们提高项目的整体质量. 作用与优点 ...

  7. [2018-01-12] jquery获取当前元素的兄弟元素

    $('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id'). ...

  8. if __name__ == "__main__" 的作用

    作用:当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行. 例子: # file one.py def func(): print("func() in one.py& ...

  9. SROP的一个实例

    以前一直只是大概看过这种技术,没实践过,今天刚好遇到一道题,实践了一波,确实很方便 unmoxiao@cat ~/s/pd_ubuntu> r2 -A smallest 00:54:15 War ...

  10. elasticsearch操作命令

    总结几个es的curl操作命令: 查询某条数据:curl -XGET http://elasticsearch:9200/company/company/123?pretty 查询索引下数据总量:cu ...