![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go_web
用户名老是占用
我是一只很胖的程序猴。
展开
-
go web: 1 创建项目
时隔1年,又拣起了go。而且是我一直很想玩的go web。网上的资料大部分都不全,这里我会实现一个简单的商业项目,目前已经应用到公司的统计服务中。 废话不说,开go。建立项目首先,创建结构:src--| handlers--| test--| test.go | main.go网上关于建立项目大部原创 2017-09-02 23:49:21 · 1250 阅读 · 1 评论 -
go web: 2 封装日志包log
在web项目中,记日志是非常重要的。所以,我做的第一件事,就是向log包动手。 和Python相比,log包功能上逊色不少,但它给我们提供了基础的构架,让我们能自己稍微封装下。需求对日志包我的要求很低,只要满足: 1. 提供Error, Info方法即可 2. 日志按天分割,即每隔一天,把昨天的日志保存为 logname.20170823这样的文件代码在原来的基础上,我们在src中创建文件夹l原创 2017-09-02 23:51:23 · 1507 阅读 · 0 评论 -
go web: 3 中间件和路由
中间件中间件的本质来看,就是在执行handler的前(后)先执行一个自定义的handler而已。那问题变成,go web中,每个handler是怎么执行的。答案在mux := http.NewServeMux()中,稍微阅读下源码,我们就能得出,mux对象中有个ServeHTTP(w, r)方法。这就秘密所在。根据go的鸭子类型特性,我们完全可以实现一个结构,然后让它拥有ServeHTTP(w, r原创 2017-09-02 23:53:09 · 2381 阅读 · 0 评论 -
go web: 4 处理默认错误
panic会导致程序崩溃在go web中,难免会引发panic。比如用户在一次请求中输入了不正确的数据导致除0或者数组越界。如果不设置默认的错误处理,那程序就会崩溃退出,这显然是不能接受的。所以要实现一个默认的总错误处理。代码依前文,现在项目中已经有如下结构:src--| handlers--| test--| tes原创 2017-09-03 00:04:32 · 607 阅读 · 0 评论 -
go web :5 用Interface{}简化对json的处理
使用go处理json,需要把它unmarshal到一个结构体。对于用惯了python的我,简直要吐血啊。 为了屏蔽掉讨厌的结构体,在处理json的时候,可以使用interface{}。具体姿势如下: 服务端:func TestTemplate(w http.ResponseWriter, r *http.Request) { timeout := time.Duration(5 * ti原创 2017-09-08 14:32:01 · 2985 阅读 · 2 评论 -
在go中封装future对象处理异步结果
在go中,有了协程和chan,就能轻松而优雅的实现很多模式。 而引入future的思想可以解放思维。其它的不说了,看注释吧。 package utils import ( "sync" "time" ) /* Future 是一个未来的任务的抽象。和python里的那个有点类似。 在异步任务中SetResult,在GetResult的时候会等待result生成,或者超时。 ...原创 2018-07-19 21:36:16 · 1851 阅读 · 0 评论