自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(208)
  • 资源 (2)
  • 收藏
  • 关注

原创 设计模式——Go语言(Golang)版:24_迭代器模式

示例代码:package mainimport ( "fmt")//迭代器接口type Iterator interface { First() IsDone() bool Next() interface{}}//迭代的数据集type Aggregate interface { Iterator() Iterator}type Numbers struct { start, end int}//实现迭代器接口对应的功能type NumbersIterator s

2021-04-08 09:08:28 31

原创 设计模式——Go语言(Golang)版:23_访问者模式

示例代码:package mainimport "fmt"type Customer interface { Accept(visitor Visitor)}type Visitor interface { Visit(customer Customer)}//客户群type CustomerCol struct { customers []Customer}func (c *CustomerCol) Add(customer Customer) { c.custom

2021-04-08 09:08:03 19

原创 设计模式——Go语言(Golang)版:22_命令模式

示例代码:package mainimport "fmt"type Command interface { Execute()}type MotherBoard struct{}func (*MotherBoard) Start() { fmt.Println("系统启动中...")}func (*MotherBoard) Reboot() { fmt.Println("系统重启中...")}//====启动命令=====type StartCommand struc

2021-04-08 09:07:31 20

原创 设计模式——Go语言(Golang)版:21_备忘录模式

示例代码:package mainimport "fmt"//备忘录模式用于保存程序内部状态到外部,又不希望暴露内部状态的情形。type Memento interface{}type gameMemento struct { hp, mp int}type Game struct { hp, mp int}func (g *Game) Play(mpDelta, hpDelta int) { g.hp += hpDelta g.mp += mpDelta}func (

2021-04-08 09:07:03 10

原创 设计模式——Go语言(Golang)版:20_策略模式

示例代码:package mainimport "fmt"//支付环境type PaymentContext struct { Name ,CardId string Money int}//支付策略type PaymentStrategy interface { Pay(ctx *PaymentContext)}//支付type Payment struct { Context *PaymentContext Strategy PaymentStrategy}f

2021-04-08 09:06:30 17

原创 设计模式——Go语言(Golang)版:19_中介模式

示例代码:package mainimport ( "fmt" "strings")type CDDriver struct { Data string}func (c *CDDriver) ReadData() { //c.Data = "音乐、图片" fmt.Println("CD驱动器正在读取:", c.Data)}type CPUDriver struct { Video string Sound string}func (c *CPUDriver)

2021-04-07 09:24:26 9

原创 设计模式——Go语言(Golang)版:18_模板模式

示例代码:package mainimport "fmt"type DownLoader interface { Download(uri string)}//具体实施type implement interface { download() save()}//模板type template struct { implement uri string}func (t *template) Download(uri string) { t.uri = uri fm

2021-04-07 09:24:03 15

原创 设计模式——Go语言(Golang)版:17_状态模式

示例代码:package mainimport "fmt"//状态模式用于分离状态和行为。//周一 至 周日 时间之间的切换type Week interface { Today() Next(ctx *DayContext)}type DayContext struct { today Week}func (dc *DayContext)Today() { dc.today.Today() //调用父类(接口)的方法,具体实现是在对应的类(结构体)中}func

2021-04-07 09:23:35 13

原创 设计模式——Go语言(Golang)版:16_解释器模式

示例代码:package mainimport ( "fmt" "strconv" "strings")//解释器接口type Node interface { Interpret() int //解释方法}//数据节点type ValNode struct { val int}func (vn *ValNode) Interpret() int { return vn.val}//=============加法节点=============type Ad

2021-04-07 09:23:13 15

原创 设计模式——Go语言(Golang)版:15_观察者模式

示例代码:package mainimport "fmt"type Observer interface { Update(subject *Subject)}type Subject struct { observers []Observer msg string}//添加观察者func (s *Subject) Attach(o Observer) { s.observers = append(s.observers, o)}//通知信息到观察者fu

2021-04-07 09:22:44 14

原创 设计模式——Go语言(Golang)版:14_责任链模式

示例代码:package mainimport "fmt"type Manager interface { HaveRight(money int)bool //有权做 HandleFeeRequest(name string,money int)bool //处理费用请求}type RequestChain struct { Manager successor *RequestChain //后续者(链式结构,链表)}func (rc *RequestChain)HaveR

2021-04-07 09:22:22 11

原创 设计模式——Go语言(Golang)版:13_享元模式

示例代码:package mainimport "fmt"//轻量级图片type ImageFlyweight struct { data string}func (i *ImageFlyweight) Data() string { return i.data}func NewImageFlyweight(fileName string) *ImageFlyweight { d := fmt.Sprintf("image data:%s", fileName) retur

2021-04-07 09:21:51 8

原创 设计模式——Go语言(Golang)版:12_装饰器模式

示例代码:package mainimport "fmt"type Component interface { Calc() int}type ConcreteComponent struct{}func (*ConcreteComponent) Calc() int { return 0}//乘法修饰器type MulDecorator struct { Component num int}func (d *MulDecorator) Calc() int {

2021-04-07 09:21:22 16

原创 设计模式——Go语言(Golang)版:11_桥接模式

示例代码:package mainimport "fmt"//发送信息的具体实现(操作)type MessageImplementer interface { send(test, to string)}//发送SMStype MessageSMS struct{}func (*MessageSMS) send(test, to string) { fmt.Printf("SMS信息:[%v];发送到:[%v]\n", test, to)}func ViaSMS() *Mes

2021-04-07 09:20:40 11

原创 设计模式——Go语言(Golang)版:10_外观模式

示例代码:package mainimport "fmt"func NewAPI() API { return &apiImpl{ a: NewAModuleAPI(), b: NewBModuleAPI(), }}//API is facade interface of facade packagetype API interface { Test() string}//facade implementtype apiImpl struct { a A

2021-04-07 09:19:51 11

原创 设计模式——Go语言(Golang)版:09_代理模式

示例代码:package mainimport "fmt"type Subject interface { Do() string}type RealSubject struct{}func (r *RealSubject) Do() string { return "执行以太坊智能合约"}type ProxySubject struct { RealSubject money int}func (p *ProxySubject) Do() string { if

2021-04-06 17:38:29 18

原创 设计模式——Go语言(Golang)版:08_组合模式

示例代码:package mainimport "fmt"type Component interface { Parent() Component SetParent(Component) Name() string SetName(string) AddChild(Component) Print(string)}const ( LeafNode = iota CompositeNode)func NewComponent(kind int, name strin

2021-04-06 17:37:21 16

原创 设计模式——Go语言(Golang)版:07_适配器模式

示例代码:package mainimport "fmt"//================1.被适配对象================//被适配的接口type Adapter interface { SpecRequest(int, int) string}//接口载体type AdapterImpl struct{}func (ap *AdapterImpl) SpecRequest(int, int) string { return "目标对象:SpecReque

2021-04-06 17:34:41 12

原创 设计模式——Go语言(Golang)版:06_建造者模式

示例代码:package mainimport "fmt"//================1.建造者接口==============//Builder 是生成器接口type Builder interface { Part1() Part2() Part3()}//===============2.建造者对象及操作===============type Director struct { builder Builder //建造者的接口}//创建接口func N

2021-04-06 17:33:25 14

原创 设计模式——Go语言(Golang)版:05_原型模式

示例代码:package mainimport "fmt"//1.原型对象需要实现的接口type Cloneable interface { Clone() Cloneable}//2.原型对象的类type PrototypeManager struct { prototypes map[string]Cloneable}//3.原型对象操作func NewPrototypeManger() *PrototypeManager { return &Prototy

2021-04-06 17:32:08 16

原创 设计模式——Go语言(Golang)版:04_单例模式

示例代码:package mainimport ( "fmt" "sync")type SingleData struct { data interface{}}var data *SingleDatavar once sync.Once //通过该类型可以实现单例模式,虽然是多次赋值,但是只执行一次(一个对象多次实例化,但是只有一个,共享对象地址)func getInstance(i int) *SingleData { once.Do(func() { data

2021-04-06 17:28:21 19

原创 设计模式——Go语言(Golang)版:03_抽象工厂模式

示例代码:package mainimport "fmt"//OrderMainDAO 为订单主记录type OrderMainDAO interface { SaveOrderMain()}//OrderDetailDAO 为订单详情纪录type OrderDetailDAO interface { SaveOrderDetail()}//DAOFactory DAO 抽象模式工厂接口type DAOFactory interface { CreateOrderMain

2021-04-06 17:26:50 14

原创 设计模式——Go语言(Golang)版:02_工厂方法模式

示例代码:package main//==============2.工厂模式===================//Operator 是被封装的实际类接口type Operator interface { SetA(int) SetB(int) Result() int}//OperatorFactory 是工厂接口type OperatorFactory interface { Create() Operator}//OperatorBase 是Operator 接口

2021-04-06 17:25:00 15

原创 设计模式——Go语言(Golang)版:01_简单工厂模式

示例代码:package mainimport "fmt"//===============1.定义简单接口=================type SimpleAPI interface { Say(content string) string}//===============2.实现对应的接口===============//对象1type Chinese struct {}func (c *Chinese) Say(content string) string {

2021-04-06 17:22:51 26

原创 设计模式——Go语言(Golang)版

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。从本节开始,陆续介绍设计模式,该设计模式采用Go语言编码实现。01_简单工厂模式02_工厂方法模式03_抽象工厂模式04_单例模式05_原型模式06_建筑者模式07_适配器模式08_组合模式09_代理模式10_外观模式1.

2021-04-06 17:10:52 42

原创 Go语言字符串处理

在平时的业务中经常需要对字符串进行处理,在此加以记录,便于小伙伴查阅。1、去掉字符串首尾空格代码如下: str := " 12 34 " fmt.Println("原字符串:", str) fmt.Println("原字符串的长度:", len(str)) s := strings.TrimSpace(str) fmt.Println("处理之后的字符串:", s) fmt.Println("处理之后的字符串长度:", len(s))可以通过 strings.Tri..

2020-12-25 15:06:31 50

原创 Go语言框架Gin之7 配置文件管理viper

Viper是适用于Go应用程序的完整配置解决方案。 它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式。 它支持:设置默认值 从JSON,TOML,YAML,HCL,envfile和Java属性配置文件中读取 实时观看和重新读取配置文件(可选) 从环境变量中读取 从远程配置系统(etcd或Consul)中读取,并观察更改 从命令行标志读取 从缓冲区读取 设置显式值 可以将Viper视为满足您所有应用程序配置需求的注册表。代码如下:写操作:func InitCo.

2020-12-22 17:09:26 177

原创 Go语言框架Gin之6 日志框架 Logrus

本节主要讲解Go语言优秀的日志框架:Logrus。Logrus 是一个结构化、可插拔的 Go 日志框架,完全兼容官方 log 库接口。功能强大的同时,Logrus 具有高度的灵活性,它提供了自定义插件的功能,有 TEXT 与 JSON 两种可选的日志输出格式。 Logrus 还支持 Field 机制和可扩展的 HOOK 机制。它鼓励用户通过 Field 机制进行精细化的、结构化的日志记录,允许用户通过 hook 的方式将日志分发到任意地方。许多著名开源项目,如 docker、prometheus 等都是..

2020-12-22 16:58:29 227

原创 Go语言框架Gin之5 数据库(原生数据库、gorm和xorm)

数据库是业务应用的核心,本节主要讲解gin框架(Go语言)操作原生数据库、go语言数据库ORM框架(gorm和xorm)。1、原生数据库package mainimport ( "database/sql" "fmt" "github.com/gin-gonic/gin" _ "github.com/go-sql-driver/mysql" "net/http")var sqlDb *sql.DB //数据库连接dbvar sqlResponse SqlR

2020-12-22 16:47:00 841

原创 Go语言框架Gin之4 安全认证

安全认证包括cookie、session、token、安全认证中间件等,本节详细讲解安全认证中间件。1、cookie核心代码:func CookieAuth() gin.HandlerFunc { return func(c *gin.Context) { val, _ := c.Cookie(cookieName) if val=="" { c.SetCookie(cookieName,cookieValue,3600,"/","localhost",true,true) .

2020-12-22 16:17:16 219

原创 Go语言框架Gin之3 中间件

路由中间件的作用: 对路由到来的数据先进行预处理,包括数据加载、请求验证(过滤)等,减少服务器程序的压力。package mainimport ( "fmt" "github.com/gin-gonic/gin" "net/http" "strconv")func main() { r:=gin.Default() //默认路由引擎:包括 Logger and Recovery middleware //r:=gin.New() //没有任何中间件的路由引擎 r.Use(Mi.

2020-12-22 15:55:07 55

原创 Go语言框架Gin之2 文件服务器

可以通过Gin框架快速搭建文件服务器,代码如下:package mainimport "github.com/gin-gonic/gin"func main() { r:=gin.Default() r.GET("/file",fileServer) r.Run(":9090")}func fileServer(c *gin.Context) { path:="E:/GoSrc/src/" fileName:=path+c.Query("name") c.File(fil.

2020-12-22 15:48:48 190

原创 Go语言框架Gin之1 HTTP请求

可以通过gin框架快速实现HTTP请求,代码如下:HTTP请求的get方法:package mainimport ( "github.com/gin-gonic/gin" "net/http")func main() { r := gin.Default()//路由引擎 r.GET("/get",getMsg) //get方法 //r.Run("127.0.0.1:9090") r.Run(":9090") //如果不指定IP地址、端口号,默认为本机IP地址、8080端.

2020-12-22 15:43:32 67

原创 Go语言框架Gin之0 概述

1、概述Gin框架是Go语言优秀的web框架,具有功能全、性能高、开发简单等特点。Go语言流行框架在GitHub上的星级数量如下(截止2020年12月):从上图可以看出,Gin框架是Go语言最深欢迎的框架。2、核心内容Gin框架的内容大致可以概括为以下内容:由于篇幅限制,在接下来的几篇博客中会介绍Gin框架的HTTP请求、文件服务器、中间件、安全认证、数据库、日志框架、配置文件管理等。...

2020-12-22 15:12:44 80 1

原创 在 Golang 中如何快速判断字符串是否在一个数组中

在 Golang 中如何快速判断字符串是否在一个数组中在使用 Python 的时候,如果要判断一个字符串是否在另一个包含字符串的列表中,可以使用in 关键词,例如:name_list = ['pm', 'kingname', '青南']if 'kingname' in name_list: print('kingname 在列表里面')但是,Golang 是没有in这个关键词的,所以如果要判断一个字符串数组中是否包含一个特定的字符串,就需要一个一个对比:package main

2020-12-08 09:55:26 1384

原创 Go语言(Golang)地址引用避坑

1、channel先看以下代码:package mainimport "fmt"func main() { ch1 := make(chan int, 3) ch2 := ch1 ch1 <- 123 ch2 <- 456 fmt.Println(ch1, ch2) //输出地址是否一样? TODO:打印结果是? fmt.Println(<-ch2, <-ch1) // ch2中的数据是:456; ch1中的数据是123;TODO:打印结果是?

2020-07-24 17:11:28 289

原创 Go语言(Golang)高并发处理思路

Go语言作为新兴的语言,最近发展势头很是迅猛,其最大的特点就是原生支持并发。它使用的是“协程(goroutine)模型”,和传统基于 OS 线程和进程实现不同,Go语言的并发是基于用户态的并发,这种并发方式就变得非常轻量,能够轻松运行几万并发逻辑。Go 的并发属于 CSP 并发模型的一种实现,CSP 并发模型的核心概念是:“不要通过共享内存来通信,而应该通过通信来共享内存”。这在 Go 语言中的实现就是 Goroutine 和 Channel。1、场景描述在一些场景下,有大规模请求(十万...

2020-07-24 16:28:32 1317 1

翻译 Go语言(Golang) -- 读取文件内容

Golang 的文件读取方法很多,所以贴在此处便后速查。一次性读取小文件推荐一次性读取,这样程序更简单,而且速度最快。代码如下:func ReadAll(filePth string) ([]byte, error) { f, err := os.Open(filePth) if err != nil { return nil, err } return ioutil.ReadAll(f)}还有更加简单的方法,我经常使用ioutil.ReadFile(fil.

2020-07-20 14:30:06 269

原创 Go语言参数校验(go-playground / validator)——自定义校验(自定义验证规则)

go-playground / validator提供了以下校验:Tag Description eqcsfield Field Equals Another Field (relative) eqfield Field Equals Another Field fieldcontains NOT DOCUMENTED IN doc.go fieldexcludes NOT DOCUMENTED IN doc.go gtcsfield Field

2020-07-17 14:33:04 2228

原创 Go语言参数校验(go-playground / validator)——基本使用

Go语言没有像Java一样的注解快速进行参数的校验,单可以通过struct tag(结构体标签)进行校验。常用的如:type User struct { ID string `json:"id"` Name string `json:"name"` Age string `json:"age"`} 但需要更复杂的校验,这时需要用一些专业的库来完成。go-playground / validator作为一款优秀的Go语言校验库,基于标记为结构体和单个字段实现值验证。使用简单、快捷。添加依

2020-07-17 14:25:40 2448

Go 学习笔记 第四版.pdf

Go语言笔记第四版,作为时下流行的一种系统编程语言,Go 简单易学,性能很好,且支持各类主流平台。已有大量项目采用 Go 编写,这其中就包括 Docker 等明星作品,其开发和执行效率早已被证明。本书经四年多逐步完善,内容覆盖了语言、运行时、性能优化、工具链等各层面知识。且内容经大量读者反馈和校对,没有明显的缺陷和错误。上卷细致解析了语言规范相关细节,便于读者深入理解语言相关功能的使用方法和注意事项。下卷则对运行时源码做出深度剖析,引导读者透彻了解语言功能背后的支持环境和运行体系,诸如内存分配、垃圾回收和并发调度等。本书不适合编程初学入门,可供有实际编程经验或正在使用Go 工作的人群参考。

2018-10-07

go连接MySQL包

go连接MySQL包:mysql比较优秀的一个驱动是:github.com/go-sql-driver/mysql

2018-09-20

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除