worker.go package main import ( "fmt" "strings" ) type WorkerLauncher interface { LaunchWorker(in chan Request) } type PreffixSuffixWorker struct { id int prefixS string suffixS string } func (w *PreffixSuffixWorker) LaunchWorker(in ch…
pipeline.go package pipeline func LaunchPipeline(amount int) int { firstCh := generator(amount) secondCh := power(firstCh) thirdCh := sum(secondCh) result := <-thirdCh return result } /* func functionName(in <-chan int) <-chan int { out := make(c…
future.go package future type SuccessFunc func(string) type FailFunc func(error) type ExecuteStringFunc func() (string, error) type MaybeString struct { successFunc SuccessFunc failFunc FailFunc } func (s *MaybeString) Success(f SuccessFunc) *MaybeSt…
barrier.go package barrier import ( "fmt" "io/ioutil" "net/http" "time" ) var timeoutMillseconds int = 5000 type barrierResp struct { Err error Resp string } func barrier(endpoints ...string) { requestNumber := len(…
Go语言设计模式之函数式选项模式 本文主要介绍了Go语言中函数式选项模式及该设计模式在实际编程中的应用. 为什么需要函数式选项模式? 最近看go-micro/options.go源码的时候,发现了一段关于服务注册的代码如下: type Options struct { Broker broker.Broker Cmd cmd.Cmd Client client.Client Server server.Server Registry registry.Registry Transport tra…
快过年了,手头的工作慢慢也就少了,所以,研究技术的时间就多了很多时间,前些天在CSDN一博客看到有大牛在讨论C的设计模式,正好看到了,我也有兴趣转发,修改,研究一下. 记得读大学的时候,老师就告诉我们说,C语言是一门面向过程的语言,C++,java,C#是面向对象的语言.C++有三个最重要的特点,即继承.封装.多态.等到后来随着编码的增多和工作经验的积累,我也慢慢明白了面向对象的含义.可是,等我工作以后,使用的编程语言更多的是C语言,这时候我又想能不能把C语言变成面向对象的语言呢?等到后来通过思…
关于本系列 决定开个新坑. 这个系列首先是关于Go语言实践的.在项目中实际使用Go语言也有段时间了,一个体会就是不论是官方文档.图书还是网络资料,关于Go语言惯用法(idiom)的介绍都比较少,基本只能靠看标准库源代码自己琢磨,所以我特别想在这方面有一些收集和总结. 然后这个系列也是关于设计模式的.虽然Go语言不是一门面向对象编程语言,但是很多面向对象设计模式所要解决的问题是在程序设计中客观存在的.不管用什么语言,总是要面对和解决这些问题的,只是解决的思路和途径会有所不同.所以我想就以经典的设计…
关于本系列 这个系列首先是关于Go语言实践的.在项目中实际使用Go语言也有段时间了,一个体会就是不论是官方文档.图书还是网络资料,关于Go语言惯用法(idiom)的介绍都比较少,基本只能靠看标准库源代码自己琢磨,所以我特别想在这方面有一些收集和总结. 然后这个系列也是关于设计模式的.虽然Go语言不是一门面向对象编程语言,但是很多面向对象设计模式所要解决的问题是在程序设计中客观存在的.不管用什么语言,总是要面对和解决这些问题的,只是解决的思路和途径会有所不同.所以我想就以经典的设计模式作为切入点来…
目录 设计模式背景和起源 设计模式是什么 Go语言模式分类 个人观点 Go语言从面世就受到了业界的普遍关注,随着区块链的火热Go语言的地位也急速蹿升,为了让读者对设计模式在Go语言中有一个初步的了解和概念,本偏对Go语言中的设计模式进行了整合和归纳,希望能对大家的学习起到一定的帮助. 设计模式背景和起源 在介绍设计模式的起源之前,我们先要了解一下模式的诞生与发展.与很多软件工程技术一样,模式起源于建筑领域,毕竟与只有几十年历史的软件工程相比,已经拥有几千年沉淀的建筑工程有太多值得学习和借鉴的地方…
一 .C语言和设计模式(继承.封装.多态) C++有三个最重要的特点,即继承.封装.多态.我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性. (1)继承性 typedef struct _parent { int data_parent; }Parent; typedef struct _Child { struct _parent parent; 10.     int data_child; 11. 12. }Child; 在设计C语言…
observer.go package observer import ( "fmt" ) type Observer interface { Notify(string) } type Publisher struct { ObserversList []Observer } func (s *Publisher) AddObserver(o Observer) { s.ObserversList = append(s.ObserversList, o) } func (s *Pub…
state.go package main import ( "fmt" "math/rand" "os" "time" ) type GameState interface { executeState(*GameContext) bool } type GameContext struct { SecretNumber int Retries int Won bool Next GameState } type Start…
这个确实没有调通,也要记录一下 visitor.go package visitor import ( "fmt" "io" "os" ) type MessageA struct { Msg string Output io.Writer } func (m *MessageA) Accept(v Visitor) { //nothing v.VisitA(m) } func (m *MessageA) Print() { //nothing…
interpreter.go package interpreter import ( //"fmt" "strconv" "strings" ) const ( SUM = "sum" SUB = "sub" MUL = "mul" DIV = "div" ) type polishNotationStack []int func (p *polishNotatio…
memento.go package memento import ( "fmt" ) type State struct { Description string } type memento struct { state State } type originator struct { state State } func (o *originator) NewMemento() memento { return memento{state: o.state} } func (o…
template.go package template import ( "strings" ) type MessageRetriever interface { Message() string } type Template interface { first() string third() string ExecuteAlgorithm(MessageRetriever) string } type TemplateImpl struct{} func (t *Templa…
package main import ( "fmt" ) type Command interface { Execute() } type ConsoleOutput struct { message string } func (c *ConsoleOutput) Execute() { fmt.Println(c.message) } func CreateCommand(s string) Command { fmt.Println("Creating comman…
package main import ( "flag" "fmt" "image" "image/color" "image/draw" "image/jpeg" "log" "os" ) var output = flag.String("output", "console", "The out…
ChainOfResponsibility.go package ChainOfResponsibility import ( "fmt" "io" "strings" ) type ChainLogger interface { Next(string) } type FirstLogger struct { NextChain ChainLogger } func (f *FirstLogger) Next(s string) { fmt.P…
flyweight.go package flyweight import ( "time" ) const ( TEAM_A = "A" TEAB_B = "B" ) type Team struct { ID uint64 Name string Shield []byte Players []Player HistoricalData []HistoricalData } type Player struct { Name string S…
decorator.go package decorator import ( "errors" "fmt" ) type IngredientAdd interface { AddIngredient() (string, error) } type PizzaDecorator struct { Ingredient IngredientAdd } func (p *PizzaDecorator) AddIngredient() (string, error)…
代理模式,单元测试用例真的写得详细, 受教~ proxy.go package proxy import ( //"errors" "fmt" ) type UserFinder interface { FindUser(id int32) (User, error) } type User struct { ID int32 } type UserList []User func (t *UserList) FindUser(id int32) (User, er…
著名的桥接模式罗.. bridge.go package bridge import ( "errors" "fmt" "io" ) type PrinterAPI interface { PrintMessage(string) error } type PrinterImpl1 struct{} func (p *PrinterImpl1) PrintMessage(msg string) error { fmt.Printf("%…
adapter.go package adapter import ( "fmt" ) type LegacyPrinter interface { Print(s string) string } type MyLegacyPrinter struct{} func (l *MyLegacyPrinter) Print(s string) (newMsg string) { newMsg = fmt.Sprintf("Legacy Printer: %s\n",…
这个代码太多了,调了一晚上. 只能立图证明我测试通过了哈. 真的是工厂的工厂,有点深.…
factory.go package factory import ( "errors" "fmt" ) const ( Cash = 1 DebitCard = 2 ) type PaymentMethod interface { Pay(amount float32) string } type CashPM struct{} type DebitCardPM struct{} func GetPaymentMethod(m int) (PaymentMetho…
builder.go package builder type BuildProcess interface { SetWheels() BuildProcess SetSeats() BuildProcess SetStructure() BuildProcess GetVehicle() VehicleProduct } type ManufacturingDirector struct { builder BuildProcess } func (f *ManufacturingDirec…
#ifndef QUEUE_H #define QUEUE_H #define QUEUE_SIZE 10 typedef struct queue { int buffer[QUEUE_SIZE]; int head; int size; int tail; int (*isFull)(struct queue* const me); int (*isEmpty)(struct queue* const me); int (*getSize)(struct queue* const me);…
NBModule.h #ifndef _NBMODULEFRAME_H__ #define _NBMODULEFRAME_H__ #include "total.h" enum NBModuleStat_Enum { SuccessStat = 0, WillOpClPowerStat, // 需要关机开机解决的状态 WillResetStat, // 需要复位解决的状态 OpreErrorStat // 操作模组错误多次,解救不回来,不再操作 }; typedef struct NB…
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) typedef int (*parse_func)(const char *data,size_t len); struct parse_handler{ int type; parse_func func; } static int parse_temperature(const char *data,size_t len) { assert(len == 4); int value = *(int…