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 ...
随机推荐
- 说说babel
一.什么是babel 二.如何配置 三.配置babel-polyfill 一.什么是babel The compiler for writing next generation JavaScript. ...
- Yii 1.1.x 单元测试
代码若不整洁,只会越来越糟糕:代码写不好,公司要黄是迟早. Yii 的应用有两种,下面记录这两种应用的单元测试方法 webApplication consoleApplication 在protect ...
- JVM(9) 程序编译及代码优化
一.早期(编译器)优化 1.编译期 Java 语言的 “编译期” 其实是一段 “不确定” 的操作过程,因为它可能是指 一个前端编译器(其实叫 “编译器的前端” 更准确一些)把 *.java 文件转变成 ...
- Mysql数据库(一)数据库设计概述
1.数据库的体系结构 1.1 数据库系统的三级模式结构是指模式.外模式和内模式. 1.2 三级模式之间的映射分为外模式/模式映射和模式/内模式映射. 2.E-R图也称“实体-关系图”,用于描述现实世界 ...
- Sqoop的安装和验证
Sqoop是一个用来完成Hadoop和关系型数据库中的数据相互转移的工具,它可以将关系型数据库中的数据导入到Hadoop的HDFS中,也可以将HDFS的数据导入到关系型数据库中. Kafka是一个开源 ...
- vue的数据双向绑定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- split分割文件与数据
split主要用途:在之前计算机发展的时候,我们必须分割文件,才能将大量数据放入多张软盘中,而今我们分割文件有了其他的目的,比如提高可读性,生成日志以及发送有大小限制的E-mail附件. 工作原理:s ...
- Unity5-ABSystem(三):AssetBundle加载
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lodypig/article/detai ...
- vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案
# vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案 最近做项目发现一个问题,页面每次刷新后加载速度都非常慢,20s左右,在开发环境则非常流畅,几乎感觉不到,本文参考望山的各种方案优化 1,关闭打 ...
- 【aliyun】学java,看这里,不迷茫!1460道Java热门问题
阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 ...