用 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 :...

[阅读更多 →]