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. Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了 ...

  2. ESP32 开发之旅② Arduino For ESP32说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  3. 计算机基础之编程 + 基本组成 + 组成补充 + 操作系统(day01整理)

    目录 一 计算机基础之编程 (一) 什么是编程语言 (二) 什么是编程 (三) 为什么要编程 二 计算机的基本组成 (一) CPU(大脑) (1) 控制器 (2) 运算器 (二) 存储器(记忆) (1 ...

  4. GO基础之数组

    一.数组的声明与遍历 package main import "fmt" //声明数组的形式1 ]int ], , , } func main() { // 声明数组的形式2 a ...

  5. Java基础(43)Queue队列

    Collection接口的第三个子接口是Queue接口,而Queue接口的子接口又是Deque接口和BlockingQueue接口. 实现了Deque接口的类有:ArrayDeque类.Concurr ...

  6. 如何在chrome使用vue-devtool?

    1.在应用中安装 2.去查找文件 C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Extensions\nhd ...

  7. SpringBoot整合MybatisPlus3.X之Wrapper(五)

    官方文档说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中 以下代码块内的多个方法均为从上往下补全个别boolean类型的入参,默认为true 以下出现 ...

  8. ubuntu 制作本地yum仓库

    ubuntu 制作本地yum仓库 笔者: 张首富 W X: y18163201(请备注) qq群:895291458 时间:2019-01-31晚 今天到某银行进行软件部署的时候,碰到所有电脑都不允许 ...

  9. Vue入坑第一篇

    写在前面的话:文章是个人学习过程中的总结,为方便以后回头在学习.文章中会参考官方文档和其他的一些文章,示例均为亲自编写和实践,若有写的不对的地方欢迎大家和我一起交流. 一.前言 本篇作为vue入门的一 ...

  10. 数据存储之非关系型数据库存储----MongoDB存储

    MongoDB存储----文档型数据库 利用pymongo连接MongoDB import pymongo client = pymongo.MongoClient(host='localhost', ...