Go语言中文网 为您找到相关结果 52

超赞的GO语言设计模式和成例集锦

来自:http://geek.csdn.net/news/detail/100051 Go语言从面世就受到了业界的普遍关注,曾有文章分析,Go是最有可能改变未来IT技术的十大语言之一。本文作者列举了Go语言的设计模式和成例合集,并且还进行了详细的分类。 创建型模式 抽象工厂模式:提供一个接口用于创建相关对象的家族;Builder模式:使用简单的对象来构建复杂的对象;工厂方法模式:一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中;对象池模式:实例化并维护一组相同类型的对象实例;单例模式:限制类的实例,保证一个类只有一个实例。 结构模式 适配器模式:适配另一个不兼容的接口来一起工作;桥接模式:将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立...阅读全文

博文 2016-09-08 06:00:09 Blues1021

设计模式(golang)

设计模式的六大原则 摘自 Java开发中的23种设计模式详解 1、开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。 所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后 面的具体设计中我们会提到这点。 2、里氏代换原则(Liskov Substitution Principle) 里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何 基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受 到...阅读全文

博文 2017-02-15 15:20:20 Cbping

golang 子类调用父类函数

// testStruct project main.go package main import ( "fmt" ) type A struct { Text string } type Operator interface { Say() } func (a *A) Say() { fmt.Printf("A::Say():%s\n", a.Text) } type B struct { A } func (b *B) Say() { b.A.Say() fmt.Printf("B::Say():%s\n", b.Text) } func main() { b := B{} b.Text = "hello,world" b.Say() } A::Say():hello,worldB::S...阅读全文

博文 2015-11-03 12:00:30 lcj0304

golang使用 mongo

生成objectid i := bson.NewObjectId() c.Insert(bson.M{"_id": i, "foo": "bar"}) golang 使用 mongo gte lte 功能 searchErr = SearchReading(bson.M{"k": key, "t": bson.M{"$gte": start, "$lte": end}}, limit)不能直接写 searchErr = SearchReading(bson.M{"k": key, "t":'{"$gte": start, "$lte": end}'}, limit) 基础小工具 golang md5 计算 func genQueryMd5(str string) string { hash ...阅读全文

博文 2016-01-05 03:00:05 shenguanpu

从面向对象的角度看Go语言与Java语言的区别

Go语言风格 GO语言是支持并发编程和内存垃圾回收的编译型静态类型语言,运行效率高,具有较强的可伸缩性(scalable)。它是为软件工程服务而进行的语言设计,强制语言规范。GO语言的面向对象编程非常简洁优雅,没有继承,隐藏的this指针等。它的面向对象是语言类型系统中的天然的一部分。整个类型系统通过接口串起来浑然一体。 Go语言与JAVA语言的区别 类型系统:JAVA中有两套完全独立的类型系统,一套是值类型系统,byte、int、boolean、char、double另一套是以object类型为根的对象类型系统,Integer,HashMap等。值类型系统希望用object类型引用,则需要装箱。而go语言中多数类型都是值语义,甚至包括一些复合类型如数组(array),结构体(struct)...阅读全文

博文 2016-04-19 09:00:01 NoraLi

go语言实现设计模式(一):策略模式

策略模式定义了算法家族,在调用算法家族的时候不感知算法的变化,客户也不会受到影响。 下面用《大话设计模式》中的一个实例进行改写。 例:超市中经常进行促销活动,促销活动的促销方法就是一个个策略,如“满一百减20”,“打八折”等。现在实现策略模式,用CashContext生产策略,并完成策略的调用。 1.首先定义所有策略的接口。 package cash type cashSuper interface { AcceptMoney(money float64) float64 } 2.定义三个子类,实现此接口 package cash //普通情况,没有折扣 type cashNormal struct { } func newCashNormal() cashNormal { instance...阅读全文

博文 2015-10-31 23:00:01 yzh900927

Go语言以匿名组合的方式实现继承

type Base struct { FirstName, LastName string Age float32 } func (base *Base) HasFeet() { fmt.Println(base.FirstName + base.LastName + "has feet! Base") } func (base *Base) Flying() { fmt.Println("Base Can flying!") } type Sub struct { Base Area string } func (sub *Sub) Flying() { sub.Base.Flying() fmt.Println("Sub flying") } func main() { chk := n...阅读全文

博文 2016-03-15 11:00:02 cc7756789w

go语言实现设计模式(二):简易工厂

简易工厂主要是用来解决对象“创建”的问题。以下的例子取自《大话设计模式》中第一章,实现一个可扩展的“计算器”。当增加新的功能时,并不需改动原来已经实现的算法。由于是简易工厂,所以我们还是需要对工厂类进行相应修改。 1.首先,我们定义一个计算的接口 package calc type CalcSuper interface { SetData(data ...interface{}) CalcOperate() float64 } 2.接下来,我们实现这个类的两个子类,分别是加法和减法 加法,就是用两个数来相加:) package calc import "fmt" type Add struct { Num1 float64 Num2 float64 } func NewAdd() *Add...阅读全文

博文 2015-11-01 11:01:11 yzh900927

golang面向对象

golang可以实现面向对象,C++能做的,golang基本也可以做。 1.简单继承 golang用组合来实现继承,父类实例的作为子类的匿名成员即可。 继承了父类的成员变量和成员方法。 同名的成员方法,无论完整函数签名是否相同,父类方法均被隐藏。 同名的变量,子类优先,父类的必须加上父类类型才能访问。 e.Human.SayHi() 在正常的设计中,不要出现同名的情况。 2.多重继承。 组合多个基类即可 3.多态行为 用接口实现 package main import ( "fmt" ) // abstract base type IA interface { Kaka()int } // child a type A struct{ } func (a *A)Kaka()int{ retu...阅读全文

博文 2015-06-17 20:02:15 fall221

Android工程师笔试常见的10个NDK与游戏开发简答题

![t014ccdb2f015c81abf.jpg](http://studygolang.qiniudn.com/151014/079d7f84e8486fc65042fe01cccb9436.jpg)   应聘软件开发的工作,一般都会有面试和笔试两个环节,Android开发工程师的的应聘也是如此。今天小编就将为大家整理10道有关NDK与游戏开发的简答题及答案,希望对求职Android工程师的童鞋有所帮助。   1、 Paint类有哪些常用方法?   void setARGB(int a, int r, int g, int b) 设置Paint对象颜色,参数一为alpha透明通道   void setAlpha(int a) 设置alpha不透明度,...阅读全文

go语言实现设计模式(三):模版模式

模版模式真的是一个好东西。所谓模版模式,就是说,某几个类中相同的操作和代码提取到父类的一个函数中,并定义相同的操作为抽象函数。由子类来实现。估计我也没表达清楚,下面还是看代码来讲解吧。 例:我们有两个文档处理程序,一个处理本地数据,一个处理网络数据。这两个类的功能和执行步骤高度类似,但是,获取数据的方式不同。在这两个类中势必存在大量结构相同的代码。现在,我们使用模版模式来重构这两个类。 1.定义父类,在父类中定义实现的具体函数和一个等待子类实例化的“抽象函数” package doc import "fmt" type DocSuper struct { GetContent func() string } func (d DocSuper) DoOperate() { fmt.Printl...阅读全文

博文 2015-11-01 22:00:05 yzh900927

Go语言学习(十三)面向对象编程-继承

1.匿名组合 Go语言也提供了继承,但是采用了组合的方式,所以我们将其称为匿名组合: package main import "fmt" //定义基类 type Base struct { Name string } //基类相关的2个成员方法 func (base *Base) A() { fmt.Println("Base method A called...") } func (base *Base) B() { fmt.Println("Base method B called...") } //定义子类 type Son struct { Base //"继承"基类 } //重写基类的B方法 func (son *Son) B() { son.Base.B() //调用基类的B方法...阅读全文

博文 2016-06-16 10:00:00 mChenys

id、NSObject *、id、instancetype分别如何使用?

在使用Objective-C语言进行iOS应用开发的时候,常常会涉及到id、NSObject *、id、instancetype这四个概念的使用,但这四者也是iOS初学者最易混淆的内容,下面小编看了一些iOS开发教程和文档,搜罗了他们的不同用法,分享给大家,一起来看看吧。 1、 id 与 NSObject * (1) id 是 Objective-C 对象,但是并不一定是NSObject对象,并非所有的Foundation/Cocoa对象都是继承于NSObject对象的,比如NSProxy。同时,id与NSObject对象之间有很多的共同方法,比如retain与release等方法。更一步来说:所有的对象本质来说都是 id 类型的。 (2) 对于id来说...阅读全文

golang 父类调用子类方法、继承多态的实现方式

实现思路: 父类方法接收子类对象,通过反射调用子类方法 直接上代码: package main import ( "fmt" "reflect" ) type A struct { } func (self A) say() { println(self.Name()) } func (self A) sayReal(child interface{}) { ref := reflect.ValueOf(child) method := ref.MethodByName("Name") if (method.IsValid()) { r := method.Call(make([]reflect.Value, 0)) fmt.Println(r[0].String()) } else { /...阅读全文

博文 2018-12-12 20:34:43 liyiyang

大话设计模式(golang) 五、工厂方法模式

模式特点:定义一个用于创建对象的接口,让子类决定实例化哪一个类。这使得一个类的实例化延迟到其子类。 程序实例:计算器。 package main import ( "fmt" ) type Operation struct { a float64 b float64 } type OperationI interface { GetResult() float64 SetA(float64) SetB(float64) } func (op *Operation) SetA(a float64) { op.a = a } func (op *Operation) SetB(b float64) { op.b = b } type AddOperation struct { Operation...阅读全文

博文 2016-08-04 20:00:15 平凡之路

Go deep into equals方法

深入equals方法 equals方法的重要性毋须多言,只要你想比较的两个对象不愿是同一对象,你就应该实现equals方法,让对象用你认为相等的条件来进行比较. 下面的内容只是API的规范,没有什么太高深的意义,但我之所以最先把它列在这儿,是因为这些规范在事实中并不是真正能保证得到实现. 1.对于任何引用类型, o.equals(o) == true成立.2.如果 o.equals(o1) == true 成立,那么o1.equals(o)==true也一定要成立.3.如果 o.equals(o1) == true 成立且 o.equals(o2) == true 成立,那么o1.equals(o2) == true 也成立.4.如果第一次调用o.equals(o1) == true成立再o...阅读全文

博文 2016-04-11 02:00:10 napolar

golang struct聚合大量接口时,初始化方式不一致?

日前,因为一个业务需要,在struct聚合上百万个接口(因为没有基类、子类,只有通过接口来代替基类作用)的时候,出现了非常意外的编译提示。初步判定是接口数量有限制导致。 ```code 调试环境:go1.6.2 darwin/amd64 代码如下: ``` ```code package main import ( "fmt" ) const arraynum = 1 << 20 //①,数组的大小定义 type I interface { GetXY() (x, y int16) } type I_impl struct { x, y int16 } func (this *I_impl) GetXY() (x, y int16) {...阅读全文

Golang接口interface的使用

关键字interface 如果一个结构体绑定的方法包含接口的所有方法,即认为实现了该接口 将对象赋值给接口时,会发生拷贝,而接口的存储是指向这个复制的指针,复制的无法修改原来状态,也无法获取指针 type CallBack interface{ getName() string } type User struct{ name string } func (user User) getName()string{ return user.name } user:=User{} f.println(user.getName()) 上面声明了一个CallBack,结构体User绑定了一个getName的方法,跟CallBack接口所声明的接口名称一样,而且实现了CallBack接口的所有方法(他现...阅读全文

博文 2017-10-10 06:04:56 Link_Biao

Golang之继承模拟

问题由一个需求引起: web的controller,希望创建一个基类,然后在子类的controller中定义action方法,基类有一个run函数能根据字符串自动找到子类的action方法。 如何解决呢? -- 用继承 示例分析继承 首先这个需求是很普遍的,由于脑中有继承概念,所以想当然地以为这个很容易实现: package main import( "reflect" ) type A struct { } func (self A)Run() { c := reflect.ValueOf(self) method := c.MethodByName("Test") println(method.IsValid()) } type B struct { A } func (self B)T...阅读全文

博文 2016-09-19 20:00:00 yjf512

Golang之继承模拟

Golang之继承模拟 2012-09-13 23:07 by 轩脉刃, 3042 阅读, 2 评论, 收藏, 编辑 问题由一个需求引起: web的controller,希望创建一个基类,然后在子类的controller中定义action方法,基类有一个run函数能根据字符串自动找到子类的action方法。 如何解决呢? -- 用继承 示例分析继承 首先这个需求是很普遍的,由于脑中有继承概念,所以想当然地以为这个很容易实现: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 package main import( "reflect" ) type A struct { } func (sel...阅读全文

博文 2015-06-17 20:02:20 blogNote

关于Go语言中nil和interface的问题

package demo01 //关于Go语言中nil和interface的问题 //Date:2014-2-19 20:04:25 import ( "fmt" ) func NilTestBase() { //test05() //fmt.Println("=====================") test06() //nilStringTest() } //类Student是类Person的子类 type Person struct { } type Student struct { Person } type IPerson interface { speak() } //为Person添加方法以实现IPerson接口 func (*Person) speak() { fmt....阅读全文

博文 2015-06-17 23:01:47 books1958

中介者模式 Go语言实现

对于一个模块或者系统,可能由很多对象构成,而且这些对象之间可能存在相互的引用,在最坏的情况下,每一个对象都知道其他所有的对象,这无疑复杂化了对象之间的联系。虽然将一个系统分割成许多对象通常可以增强可复用性,但是对象间相互连接的激增又会降低其可复用性,大量的相互连接使得一个对象似乎不太可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,而且对系统的行为进行任何较大的改动都会十分困难。结果是你不得不定义大量的子类以定制系统的行为。因此,为了减少对象两两之间复杂的引用关系,使之成为一个松耦合的系统,我们需要使用中介者模式. 中介者模式:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。中介者模式又称为调停者模式。...阅读全文

博文 2016-04-20 03:00:02 readen

golang面向对象特性

和其他高级语言一样,golang 也支持面向对象编程,支持得比较简单,有些特性并不支持,但是够用了 接口 接口使用 interface 关键字声明,任何实现接口定义方法的类都可以实例化该接口,接口和实现类之间没有任何依赖,你可以实现一个新的类当做 Sayer 来使用,而不需要依赖 Sayer 接口,也可以为已有的类创建一个新的接口,而不需要修改任何已有的代码,和其他静态语言相比,这可以算是 golang 的特色了吧 type Sayer interface { Say(message string) SayHi() } 继承 继承使用组合的方式实现 type Animal struct { Name string } func (a *Animal) Say(message string) ...阅读全文

博文 2018-10-21 21:34:42 Chole121

内嵌的结构体如何调用其外部结构体的方法?

```go package main import ( "fmt" ) type Animal struct{} func (a *Animal) Escape() { a.Run() } func (a *Animal) Run() { fmt.Printf("Animal Run.\n") } type Dog struct { Animal } func (d *Dog) Run() { fmt.Printf("Dog Run.\n") } func main() { dog := Dog{} dog.Escape() } ``` 运行结果为:`Animal Run.` 但我想要的结果应该是:`D...阅读全文

超赞的GO语言设计模式和成例集锦

来自:http://geek.csdn.net/news/detail/100051 Go语言从面世就受到了业界的普遍关注,曾有文章分析,Go是最有可能改变未来IT技术的十大语言之一。本文作者列举了Go语言的设计模式和成例合集,并且还进行了详细的分类。 创建型模式 抽象工厂模式:提供一个接口用于创建相关对象的家族;Builder模式:使用简单的对象来构建复杂的对象;工厂方法模式:一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中;对象池模式:实例化并维护一组相同类型的对象实例;单例模式:限制类的实例,保证一个类只有一个实例。 结构模式 适配器模式:适配另一个不兼容的接口来一起工作;桥接模式:将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立...阅读全文

博文 2016-09-16 17:00:00 Blues1021

Python多重继承使用方法

来源:http://www.oldboyedu.com/zuixin_wenzhang/index/id/130.html 继承是面向对象编程的一个重要方式,通过继承,子类可以扩展父类的功能,Python也具有该特性,除此之外,Python还可以使用多重继承。 **语法:** class subClass(Base1,Base2) 该语法的含义是创建了一个subClass类,让它同时继承了Base1和Base2的相关特性,关于继承还有以下规则需要遵循: 1. 继承只会继承父类的方法,不能继承父类的变量; 2. 要想继承父类的变量,需要执行父类的__init__(self)方法; 3. 下划线开头的变量或方法,会被认为是受保护的,不能直接点出来,但如果...阅读全文

Python爬虫之处理异常 python进阶

每个程序都不可避免地要进行异常处理,爬虫也不例外,假如不进行异常处理,可能导致爬虫程序直接崩掉。以下是网络爬虫出现的异常种类。 **URLError** 通常,URLError在没有网络连接(没有路由到特定服务器),或者服务器不存在的情况下产生。 **HTTPError** 首先我们要明白服务器上每一个HTTP 应答对象response都包含一个数字“状态码”,该状态码表示HTTP协议所返回的响应的状态,这就是HTTPError。比如当产生“404 Not Found”的时候,便表示“没有找到对应页面”,可能是输错了URL地址,也可能IP被该网站屏蔽了,这时便要使用代理IP进行爬取数据。 **两者关系** 两者是父类与子类的关系,即HTTPError是U...阅读全文

Golang 中的 面向对象: 方法, 类, 方法继承, 接口, 多态的简单描述与实现

前言: Golang 相似与C语言, 基础语法与C基本一致,除了广受争议的 左花括号 必须与代码同行的问题, 别的基本差不多; 学会了C, 基本上万变不离其宗, 现在的高级语言身上都能看到C的影子; Golang 中的 面向对象 什么是面向对象? 面向对象是一种编程思想, 并不是某一种开发语言独属; 那什么是对象? 对象,指的是客体。所谓客体是指客观存在的对象实体和主观抽象的概念。(扩展阅读) 简单理解就是, 抽象一个拥有多重属性的客体, 将共有属性抽离出来为一个类, 以便实现定义多个客体的功能。 面向对象有哪些特征? 面向对象 通常包括三个特征 继承, 封装 和 多态; (简单理解) 继承: 由子类继承父类的属性/数据/方法等; 封装: 以最简单的函数形式将方法展示出去, 而不需要使用者知...阅读全文

博文 2018-07-21 00:30:02 gettolive

大话设计模式(golang) 七、模版方法模式

模式特点:通过吧不变的行为搬到父类,去除子类中的重复代码。 程序实例:考试时使用同一种考卷(父类),不同学生上交自己填写的试卷(子类方法的实现) package main import ( "fmt" ) type TestPaper struct { child interface{} } func (t *TestPaper) testQuestion1() { fmt.Println("杨过得到,后来给了郭靖,练成倚天剑、屠龙刀的玄铁可能是[] a.球磨铸铁 b.马口铁 c.高速合金钥 d.碳素纤维") fmt.Println("答案:", t.child.(Answers).answer1()) } func (t *TestPaper) testQuestion2() { fmt....阅读全文

博文 2016-08-04 20:00:12 平凡之路

go 无数据抽象设计

interface是golang的抽象设计的根基,是方法集合的接口,是一个非常强大的并且规范的指针,可以引用任意实现了该接口的方法集合的struct,不能定义属性,意味着在抽象设计里是不允许有数据的,使语言的编译运行管理更纯粹方便。 一切属性都是setter/getter1234567891011121314151617181920212223242526272829303132333435363738394041424344package maintype Surface struct{ skin string}func (s *Surface) Skin() string{ return "My skin is " + s.skin}type Men interface { GetSur...阅读全文

博文 2017-12-06 15:03:59 宽视角

Go的接口与Go面向对象编程

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程范型,同时也是一种程序开发的方法。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性[1],对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象[2][3]。Go语言也是一种面向对象编程的语言,但是和传统的编程语言有一些不同。但是Go也有很多传统OOP语言的特点: Methods on any defined type Polymorphism Namespacing Message Passing/Delegation Go在定义2...阅读全文

博文 2017-02-10 12:26:45 谢权

Golang面向对象编程之继承&虚基类【组合&接口】

[TOC] Golang面向对象编程之继承&虚基类【组合&接口】 201808 相关说明 Golang里面没有像C++一样有继承相关的概念,但是我们却可以实现继承相关的用法,这就要用到struct、interface这两个结构。 Golang里面有组合的概念,也就是一个struct 里面可以包含一个或者多个struct,struct可以近似理解为面向对象编程中的class,但是不能等同,有很多区别。如果一个struct实现了某个接口的所有方法,那么只要是包含这个struct的所有其他struct也都是实现了这个接口的所有方法 实现 class 类 要想实现class类的用法,那么就要用到struct结构,通过给定struct定义某个成员变量或成员方法就可以实现类的方法 通过type stru...阅读全文

博文 2018-10-19 18:34:41 吴德宝AllenWu

golang 继承 , 封装, 多态解释

用实现计算机加减法功能为例 继承 golang 中的继承是通过结构体中的匿名字段来实现 例:定义一个 BaseNum 对象 (结构体),作为父类,Add 和Sub 对象(结构体)中包含了BaseNum 匿名字段, 此时 Add 和Sub 就是BaseNum的子类 type BaseNum struct { num1 int num2 int } // BaseNum 即为父类型名称 type Add struct { BaseNum } //加法子类, 定义加法子类的主要目的, 是为了定义对应子类的方法 type Sub struct { BaseNum } //减法子类 封装 子类Add 和Sub 都有计算的方法 Opt func (a *Add)Opt()(value int) { re...阅读全文

博文 2018-12-27 20:34:42 husky_1

工厂方法模式

一、模式的定义与特点 工厂方法(FactoryMethod)模式的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子类工厂类中 工厂方法模式的主要优点 调用发只需要知道具体工厂的名称,无需知道产品的具体创建过程 增加新的产品时只需要添加具体产品类和对应的具体工厂类,无需对原工厂进行任何修改 二、模式的结构和实现 工厂方法模式由抽象工厂、具体工厂、抽象产品和具体产品等4个要素构成 模式的实现 package FactoryMethod; public class AbstractFactoryTest { public static void main(String[] args) { try { Product a; AbstractFactory af; af=(A...阅读全文

博文 2019-05-14 00:34:52 简书帅气的昵称已被使用

c#静态构造函数并跟golang比较

ORM框架在基类中定义各增删改查方法,子类实现保存尽可能简洁,除了各属性表示表结构(也就是POCO Plain Old Csharp Object)至少还得有表名等信息。 考虑一下代码片段: public abstract class RecordBase where T : RecordBase, new() { protected static string TableName; public static List GetByID(int id) { using (var conn = OpenConnection()) { var sql = "select * from " + TableName + " where ID = @id"; return conn....阅读全文

博文 2017-02-13 15:05:51 ezbuy研发

GO语言面试系列:(九)golang强制类型转换示例(usafe包)

题目: 设计父结构体—员工。子结构体:工人,农民,教师,科学家(scientist),服务生。 (1)其中工人,农民,服务生只有基本工资。(10分) (2)教师除基本工资外,还有课酬(元/天)。(10分) (3)科学家除基本工资外,还有年终奖。(10分) 编写一个测试结构体,将各种类型的员工的全年工资打印出来。(10分) 代码示例: package main import ( "fmt" "unsafe" ) type Employee struct { //基本工资 BaseWage float64 eType E_TYPE //员工类型 } type E_TYPE string const ( WORKER E_TYPE = "工人" FARMER = "农民" TEACHER2 = "...阅读全文

博文 2018-12-05 17:34:54 Chole121

golang 面向对象特性

和其他高级语言一样,golang 也支持面向对象编程,支持得比较简单,有些特性并不支持,但是够用了 接口 接口使用 interface 关键字声明,任何实现接口定义方法的类都可以实例化该接口,接口和实现类之间没有任何依赖,你可以实现一个新的类当做 Sayer 来使用,而不需要依赖 Sayer 接口,也可以为已有的类创建一个新的接口,而不需要修改任何已有的代码,和其他静态语言相比,这可以算是 golang 的特色了吧 type Sayer interface { Say(message string) SayHi() } 继承 继承使用组合的方式实现 type Animal struct { Name string } func (a *Animal) Say(message string) ...阅读全文

博文 2018-06-19 19:34:44 hatlonely

SOLID原则

好代码的原则, 很久之前的前人提出的,golang是如何实现的呢。 [S] Single Responsibility Principle -- 单一职责原则 (一个类有着单一的功能) 有点类似UNIX的小工具集合起来做大的复杂的事情。 [o] Open Close Principle -- 开闭原则 , 对扩展开放, 对修改关闭。 新增的代价小于修改的代价。 [L] Liskov Substitution Principle -- 里氏替换原则, 简单说就是子类可以替换基类。 正因此,增加子类也就可以实现开闭原则。 [I] Interface Segregation Principle -- 接口隔离原则 多个特定客户端接口要好于一个宽泛用途的接口 ... 接口隔离。嘤嘤嘤。。 [D] D...阅读全文

博文 2019-04-16 20:34:47 个00个

go 学习笔记之万万没想到宠物店竟然催生出面向接口编程?

## 到底是要猫还是要狗 在上篇文章中,我们编撰了一则简短的小故事用于讲解了什么是面向对象的继承特性以及 `Go` 语言是如何实现这种继承语义的,这一节我们将继续探讨新的场景,希望能顺便讲解面向对象的接口概念. 为了照顾到没有看过上一节文章的读取,这里再简述一下上节文章关于买宠物的故事,如需详细了解,请自行翻阅历史文章进行查看. A: 猫是一种宠物,淘气可爱会卖萌,看家本领抓老鼠,偶尔还会喵喵喵. B: 狗是一种宠物,忠实听话能看家,嗅觉灵敏会破案,一言不合汪汪汪. C: 我想要买一个宠物,文能卖萌,武可退敌,明个一早给我送来吧! 于是,第二天,A和B各自带着自己的宠物来拜见C,并附上各自的理由,说的头头是道,C总觉得有些哪里不对,可一时间又无言反驳,只能悻悻收下了猫和狗,白白多花了一份钱!...阅读全文

博文 2019-08-28 23:04:44 snowdreams1006

大话设计模式 -- Golang实现

DesignPattern Use GO language to achieve 23 design patterns 该项目是拜读《大话设计模式》后,学习Golang语言实现的,有很多不足之处,有待完善 有些模式是根据UML图编写的基本框架,有些是基于特定的环境下编写的实例 创建型模式 Abstract Factory抽象工厂模式:提供一个创建一系列相关或者相互依赖对象的接口,而无需指定他们具体的类 Builder建造者模式:将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示 Factory Method工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类 Prototype 原型模式:用原型实例指定创建对象的种类,并...阅读全文

博文 2019-03-27 21:35:24 Golang语言社区

使用Golang的interface接口设计原则

1、interface接口interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“implements”关键字,只是通过约定的形式,隐式的实现interface 中的方法即可。因此,Golang 中的 interface 让编码更灵活、易扩展。如何理解go 语言中的interface ? 只需记住以下三点即可:注意:a. interface 可以被任意对象实现,一个类型/对象也可以实现多个 interfaceb. 方法不能重载,如eat(), eat(s string)不能同时存在package main import "fmt" type Phone interface { call()...阅读全文

博文 2019-07-03 17:35:19 CC_ab48

Go语言探索 - 11(原创)

上一篇文章 主要学习了Go语言的切片以及Map。本篇文章主要学习的是Go语言中的接口、反射以及错误和异常处理。接口:回想一下,在Java中,有父类和子类的说法,父类主要是提供抽象的公共方法让子类基于此拓展自身的功能。Java还有抽象类和接口那么,在Go语言中也提供了一种数据类型,接口。GO语言的接口是把所有的具有共性的方法定义在一起,其他类型只要实现了接口内的方法就是实现了这个接口。(是不是很类似Java的接口?)GO语言定义接口的语法格式:type 接口名 interface { 接口方法();}GO语言接口实战:为了看到效果,首先我们定义一个吃东西的接口,由于中西方饮食文化的差异,我们用筷子,歪果仁用刀叉,针对这种差异我们可以定义两个结构体;我们让这两个结构体都实现吃的接口,由于接口不能...阅读全文

博文 2018-07-12 17:34:47 骑小猪看流星

美美的小程序开发之路--20190331

类和继承 在面向对象的编程语言中存在“类”的概念,类就表示数据的类型,比如说People类;继承是指某个类是由另一个类派生出来的。生成的新类是子类,被继承的类是父类。 JS中的“var” 在某一类编程语言中会采用动态类型,是指编码时不要求指定变量类型,实际的变量类型由编译器/解释器在加载程序时动态分配。在JavaScript中用var声明变量,用let声明常量。 nil,null和undefined 通常声明变量的步骤为var a_varible = null;这里表示变量a_varible的值初始化时是空的,即null;在某些语言中是nil,比如Objective-C,Golang。有时声明变量也可以写成var a_varible,在JavaScript中,此时的变量值是undefined...阅读全文

博文 2019-04-01 18:34:41 原鸣清

Golang的垂直组合思维——type embedding

什么是Golang的正交组合-垂直组合思维:Tony Bai的博客 - Coding in GO way - Orthogonal Composition Go语言通过type embedding实现垂直组合。组合方式莫过于以下这么几种: a):construct interface by embedding interface b):construct struct by embedding interface c):construct struct by embedding struct Go语言中没有继承,但是可以用结构体嵌入实现继承,还有接口这个东西。现在问题来了:什么场景下应该用继承,什么场景下应该用接口。这里从一个实际的案例出发。 问题描述: 网游服务器中的一个例子。假设每个实体...阅读全文

博文 2019-03-07 19:34:42 Ovenvan

Java设计模式学习记录-模板方法模式

前言模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模板方法模式概念介绍模板方法模式,其实是很好理解的,具体理解为,定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可冲定义该算法的某些特定步骤。模板方法模式是最为常见的设计模式之一,是基于继承的代码复用技术。架构师定义一套骨架,开发工程师按照骨架去实现具体的逻辑。举例在具体的项目中其实使用模板方法的场景有很多,就举我之间遇到过的一个场景吧,这是一个实际的项目,结合这个项目的中的场景可以引出模板方法模式的使用方法,在一个审批流程的项目,会有很多种的申请单,例如:出差申请单、请假申请单、采购申请单、付款申请单等等。每个申...阅读全文

博文 2018-10-22 17:19:34 Enjoyjava

golang强制类型转换示例(usafe包)

设计父结构体—员工。子结构体:工人,农民,教师,科学家(scientist),服务生。 (1)其中工人,农民,服务生只有基本工资。(10分) (2)教师除基本工资外,还有课酬(元/天)。(10分) (3)科学家除基本工资外,还有年终奖。(10分) 编写一个测试结构体,将各种类型的员工的全年工资打印出来。(10分) 代码示例: package main import ( "fmt" "unsafe" ) type Employee struct { //基本工资 BaseWage float64 eType E_TYPE //员工类型 } type E_TYPE string const ( WORKER E_TYPE = "工人" FARMER = "农民" TEACHER2 = "老师" ...阅读全文

博文 2018-12-04 22:34:43 波涛澎湃

Golang 实现接口

Duck Typing golang的接口很有意思,与java的思路不一样,java中是申明是的,必须使用关键字implements。而golang中则用的是Duck-Like的模式,如果子类的行为与接口一致,则这个子类就实现了该接口。如果某个东西的行为和鸭子一样,那么我们就说这个是一个只鸭子。 Java接口 interface AInterface{ void behavior(); } class ConcreteClass implements AInterface { void behavior(); } 上面的例子就是Java的中实现接口, 必须使用implements 关键字。 Golang 接口 type Car interface { Drive() } type EVCar...阅读全文

博文 2018-12-29 10:35:56 阿福德

java子类调用父类构造器函数

正文 class FatherClass{ public FatherClass(){ System.out.println("父类 无参 构造函数"); } public FatherClass(int i){ System.out.println("父类 一个参数构造函数super = "+i); } public FatherClass(int i,String j){ System.out.println("父类 一个参数构造函数superi = "+i+",superj = "+j); } } class SonClass extends FatherClass{ public SonClass(){ // super(22);//line 1 System.out.println...阅读全文

博文 2019-10-20 13:02:39 小碗汤

🎄 装饰模式-Decorator

🎄 装饰模式-Decorator https://github.com/mumushuiding/golang-design-pattern/tree/master/03_Decorator❓ 问题🎄 装饰模式应该可以在运行时 动态 地给一个已有的对象 添加 功能 (类似装饰圣诞树)✔️ 解决方法🎯通过装饰类 聚集 需要装饰和扩展的对象.💄同时提供给顾客或客户与 装饰 相同的接口.⚡️类图 👦参与者装饰模式的参与者:🐤 IAuto (组件接口).IAuto 基类,基类的对象希望扩展自己的功能,但是自身不做任何修改.💄 Decorator (装饰类). 装饰 类是基类IAuto的派生类, 类 Decorator 聚集 了类 IAuto 接口,通过这个对象可以调用 IAuto 类的子类.装饰类 ...阅读全文

博文 2019-08-26 15:33:15 mumushuiding