Go - 如何使用 Resty

Go - 如何使用Resty 介绍 RESTful API已成为现代Web开发的基石,实现了客户端和服务器之间的无缝通信。在本文中,我们将探索使用Resty这个流行的HTTP客户端库在Go中执行常见操作,如GET、POST、UPDATE和DELETE请求的强大和简单性。我们还将学习如何在请求中传递头部,以便自定义和增强我们的API交互。 安装Resty 首先,我们需要在Go环境中安装Resty。我们可以使用以下命令安...

[阅读更多 →]

使用 gg 库实现文本生成

需求 需要实现一个文本生成器,可以接受以下参数: 文本内容 字体路径 背景图片路径 字体大小 生成的文本需要以背景图片为底,将文本按照指定字体、大小进行绘制。 实现 为了实现上述需求,我使用了go语言中的gg库。gg库是一个轻量级的2D绘图库,提供了简单易用的API,可以方便地进行图形绘制。 具体实现步骤如下: 使用gg.NewContextWithFile()方法创建一个新的绘图上下文,同时指定背景图片路径。...

[阅读更多 →]

【设计模式】策略模式实现简单商品打折功能

需求 作为电子商务网站拥有者,提供产品折扣来吸引和留住客户非常重要。在本博客文章中,我们将探讨如何使用Go语言中的策略模式实现商品的简单打折功能。 实现 策略模式需要先定义一个打折的抽象接口,每一种打折算法都要实现该接口,打折方式分别是正常收费、打折收费和返利收费: package cash // Cash 现金收费接口 type Cash interface { AccessCash(money floa...

[阅读更多 →]

【设计模式】使用 go 语言实现简单工厂模式

最近在看《大话设计模式》,这本书通过对话形式讲解设计模式的使用场景,有兴趣的可以去看一下。 第一篇讲的是简单工厂模式,要求输入两个数和运算符号,得到运行结果。 这个需求不难,难就难在类要怎么设计,才能达到可复用、维护性强、可拓展和灵活性高。 运算符可能是加、减、乘、除,未了方便以后可以拓展其它运算符,这里可以声明一个抽象接口,通过简单工厂设计模式返回不通的运算类。 package operate type IOpe...

[阅读更多 →]

用 Go 的范型实现 MongoDB 的 CRUD 操作

MongoDB是一个非常强大的数据库,它提供了一个非常简单的接口,可以让我们在Go中使用它。 前几天用gin+gorm实现一个小功能,根据操作的方法,发现很容易实现通用的CRUD操作。 比如批量查询数据时,可以定义一个interface或具体结构体去绑定结果集: # 返回值也可以定义为interface{} func FindAllAd(filter interface{}, sort interface{}) ([...

[阅读更多 →]

gin + grom 实现分页功能

项目介绍 使用gin + gorm实现分页,按一般的mvc架构思想去划分目录,良好的编码习惯是用Dao层去查询数据库,Server层去实现业务逻辑(此案例业务逻辑简单所以没有封装)。 第三方库 gin gorm以及对应的mysql驱动包 目录结构 ├── README.md ├── config │ └── config.go ├── controller │ └── user.go ├── dao │ ...

[阅读更多 →]

Go + Vercel 实现简易每日早报

经常可以看到 每日60s读懂世界 就尝试用go实现, 另外对于Vercel的一键部署工具挺感兴趣的。 Vercel既可以用来做测试环境,也可以做生产环境,本质上是一个使用HTTP触发事件的Serverless应用, 项目在github上,想学习的可以去参考一下。 Vercel可以直接运行html文件和静态文件地址,但是接口就要另外定义,接口处理逻辑直接用go自带的http.Handle。 安装Vercel npm i...

[阅读更多 →]

golang 发送 application/x-www-form-urlencoded 类型请求

需要结合标准库url的Values结构体,比如: postData := url.Values{} postData.Add("name", "Chris") postData.Add("language", "golang") 普通post请求可以直接使用http.Post方法,第二个参数为application/x-www-form-urlencoded,如: response, err := http.Post...

[阅读更多 →]

golang 并发编程

CPU基本概念 要了解golang的并发编程,需要先简单了解cpu是什么? cpu是计算机的“大脑”,不仅能实现基本算术运算,还能通过总线控制和协调电子配件的输入和输出。我们编写的程序代码,比如打印语句,最终是由cpu从内存中取得指令、解码、执行。cpu执行指令速度非常快,通常执行一条指令只需要零点几纳秒。 早期的计算机是单核的,计算机设计师在设计体系结构为了能让处理器跑得更快,把cpu设计为交替地取得和执行指令。简...

[阅读更多 →]

简单用 golang 做并发爬虫

对于没有接触过swoole的PHP开发者,可能对于并发编程或异步编程比较陌生。并发编程就是在短时间内完成多个任务,以往我们都是一个任务完成后,再完成下一个任务。比如接下来采集的网站,我是分几个小模块进行处理,首先先采集章节的链接,然后在根据章节的链接获取内容,最后再把获取到的内容写到文件里。 安装依赖包 github.com/PuerkitoBio/goquery 处理文档,类似Jquery github.com/...

[阅读更多 →]

Golang 练手系列 002-模板循环数据

模板的{{range}}与Go语法里面的range类似,循环操作数据。 跟第一章一样,先定义路由和对应的处理函数,不同的是就是创建模板的步骤,因为模板里如果要注入函数,必须在在调用ParseFiles函数前注入函数,否则会报模板错误。 func Number(number int) int { return number + 1 } funcMap := template.FuncMap{"number": ...

[阅读更多 →]

Golang 练手系列 001-引入静态模板

大部份做了几年的PHP程序员都会打算学多一门编程语言,很多都选择Golang或Python,相比之下我比较喜欢Golang,现在想通过一些小案例来练手,也希望对大家有帮助。 Go自带http库,包含对路由的处理,比PHP处理起来方便多了。 路由定义 首先先定义路由处理函数: func handleHome(w http.ResponseWriter, r *http.Request){ } 然后定义路由并绑定到刚刚...

[阅读更多 →]

golang 判断字符是否为汉字

Golang判断字符是否为汉字,主要有两种方式,一种是使用正则匹配,另外一种是使用系统自带的unicode包。 正则匹配 var str := "你好,Golang" var hzRegexp, _ = regexp.Compile("([\u4e00-\u9fa5]+)") fmt.Println(hzRegexp.MatchString(str)) 运行结果是true,如果要查找子匹配项,可以这样找: sub :...

[阅读更多 →]