golang学习--go中'继承'和多态
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中'继承'和多态的更多相关文章
- python中继承和多态
继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...
- [转]Java中继承、多态、重载和重写介绍
什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...
- c语言中继承和多态的简单实现
C语言本身是不支持继承和多态的,但其实在 C 的世界里,有一套非常有名的面向对象的框架,用的也非常广,那就是 GObject,它是整个图形界面开发库 GTK 的基石,在IBM developerWor ...
- C#中继承和多态
1.继承的概念 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用已存在的类的功能. 为了提高软件模块的可复用性和可扩充性,以便提高软件的开发效率,我们总 ...
- Java学习--封装、继承、多态
接下来几天会根据http://www.cnblogs.com/chenssy/category/525010.html中讲解的java内容做个学习笔记,在此感谢一下这位大仙!! 一.封装 对于封装而言 ...
- 0022 Java学习笔记-面向对象-继承、多态、组合
继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...
- Java编程思想学习笔记_2(继承和多态)
静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...
- Java中继承与多态
Java类的继承继承的语法结构: [修饰符列表] class 子类名 extends 父类名{ 类体; }子类就是当前这个类,父类就是我们要复用的那个类java中只支持单继承 ...
- python学习日记(继承和多态)
继承 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.S ...
随机推荐
- NOMP矿池搭建
本文将以dash(x11)和Raven(x16rv2)为例子来说明多算法矿池的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 16.04 1.2 安装必 ...
- e.target与事件委托简例(原生和jQuery的区别)
target定义(英译:目标,目的): target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素.文档或窗口. 语法: event.target event.target.no ...
- Spring Cloud Alibaba(三)Sentinel之熔断降级
本项目演示如何使用 Sentinel 完成 Spring Cloud 应用的熔断降级调用. Sentinel 是阿里巴巴开源的分布式系统的流量防卫组件,Sentinel 把流量作为切入点,从流量控制, ...
- hdfs 文件系统命令操作
hdfs 文件系统命令操作 [1]hdfs dfs -ls [目录]. 显示所有文件 hdfs dfs -ls -h /user/20170214.txt 显示文件时,文件大小以人易读的形式显示 [2 ...
- Linux下zkui的安装
前提:部署好java环境 1.拉取安装包 git clone https://github.com/DeemOpen/zkui.git 2.进入zkui目录 cd zkui/ 3.使用mvn命令进行编 ...
- Java IO_003.Reader与Writer--字符流以及编码对数据的操作(读取与写入)
Java IO之Reader与Writer对象常用操作(包含了编码问题的处理) 涉及到文件(非文件夹)内容的操作,如果是纯文本的情况下,除了要用到File(见之前文章),另外就必须用到字符输入流或字符 ...
- IDEA配置maven+错误记录
使用maven并不是那么顺利所以把自己遇到的问题也记录一下 下载maven 从官网下载maven官网 配置环境变量 新建一个变量名:MAVEN_HOME 值:maven目录 path:%MAVEN_H ...
- text文本样式二
text-transform样式用于将元素的字母全都变成大小 letter-spacing设置字符之间的间距 <html> <head> <style type=&quo ...
- spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)
本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 前言 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...
- python学习之【第五篇】:Python中的元组及其所具有的方法
1.前言 Python的元组(tuple)与列表很相似,不同之处在于元组不能被修改,即元组一旦创建,就不能向元组中的增加新元素,不能删除元素中的元素,更不能修改元组中元素.但是元组可以访问任意元素,可 ...