Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

作者头像
用户9127725
发布于 2022-09-21 07:04:10
发布于 2022-09-21 07:04:10
33100
代码可运行
举报
运行总次数:0
代码可运行

在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris。彩虹女神的名号响彻寰宇、名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Iris回眸一笑撩人心扉:“虽然你们也不是那么慢,但我还是快那么一点点......”,本次就让我们来一睹彩虹女神Iris的芳颜,感受宇宙最快Web框架的神乎其神。

    女神本神(Iris)

    选择一款框架有诸多的参考层面,比如灵活性、扩展性、API友好程度、文档详细程度、项目活跃度、社区贡献等等,但是性能和内存占用绝对是优先参考的一个重要层面,原因无他,天下武功,唯快不破,正所谓一快遮百丑,经济下行,降本增效的大背景之下,高性能框架无疑占据极大的优势,说白了,成本相仿的前提下,我单位时间内网络请求吞吐量是你的一倍,还没用力,你就倒下了,你怎么跟我打?游戏还没开始,就已经结束了。

    空口白牙,不足为据,参见2022年最新请求吞吐量对比图:

    事实上,Iris本质上也是社区驱动的Go语言Web框架,支持http2/3,完备的MVC支持,奉行极简主义风格,轻量化与简明风格比起Gin来说,也不遑多让,与此同时,社区活跃度和文档支持都非常到位,但其拥有的极其恐怖的高性能特性,其他框架则是望尘莫及。在Iris身上,我们可以看到她对性能的近乎于偏执的完美追求,Iris为了优化性能,不惜自己开发和集成最快的组件,比如日志记录内置了golog模块,比如json序列化就选择了第三方库jsoniter,从框架设计的态度上,极尽完美之能事。

    建立项目IrisBlog

    参照Iris官网文档:https://github.com/kataras/iris/blob/master/README_ZH.md,我们借助彩虹女神Iris的垂爱,打造一款史上最快的在线博客系统,首先建立文件夹IrisBlog:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir IrisBlog
cd IrisBlog

    随后通过go mod命令初始化项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Users\liuyue\www\iriblog>go mod init IrisBlog
go: creating new go.mod: module IrisBlog

    对于go mod不熟的朋友,请移玉步至层次分明井然有条,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang包管理机制(package)EP10,关于go mod的使用,这里不再赘述。

    接着,由于诸位可以理解的原因,请确保使用国内的安装源:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go env -w GOPROXY=https://goproxy.cn,direct

    随后安装彩虹女神Iris:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get -u github.com/kataras/iris

    系统返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Users\liuyue\www\iriblog>go get -u github.com/kataras/iris
go: downloading github.com/kataras/iris v0.0.2
go: downloading github.com/BurntSushi/toml v0.3.1
go: downloading github.com/kataras/golog v0.0.18
go: downloading github.com/kataras/pio v0.0.8
go: downloading github.com/kataras/sitemap v0.0.5
go: downloading github.com/BurntSushi/toml v1.2.0
go: downloading github.com/kataras/tunnel v0.0.1
go: downloading github.com/kataras/golog v0.1.7
go: downloading github.com/kataras/pio v0.0.10
go: downloading gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776
go: downloading github.com/kataras/tunnel v0.0.4
go: downloading gopkg.in/yaml.v3 v3.0.1
go: downloading github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398
go: downloading github.com/fatih/structs v1.1.0
go: downloading github.com/andybalholm/brotli v1.0.1-0.20200619015827-c3da72aa01ed
go: downloading github.com/iris-contrib/schema v0.0.2
go: downloading github.com/andybalholm/brotli v1.0.4
go: downloading github.com/iris-contrib/schema v0.0.6
go: downloading github.com/json-iterator/go v1.1.10
go: downloading github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06
go: downloading github.com/klauspost/compress v1.10.10
go: downloading github.com/klauspost/compress v1.15.9
go: downloading github.com/microcosm-cc/bluemonday v1.0.3
go: downloading github.com/russross/blackfriday/v2 v2.0.1
go: downloading github.com/vmihailenco/msgpack/v5 v5.0.0-beta.1
go: downloading golang.org/x/net v0.0.0-20200707034311-ab3426394381
go: downloading github.com/russross/blackfriday v1.5.2
go: downloading github.com/vmihailenco/msgpack v4.0.4+incompatible
go: downloading github.com/microcosm-cc/bluemonday v1.0.19
go: downloading github.com/vmihailenco/msgpack/v5 v5.3.5
go: downloading golang.org/x/text v0.3.3
go: downloading golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e
go: downloading github.com/russross/blackfriday/v2 v2.1.0
go: downloading github.com/russross/blackfriday v1.6.0
go: downloading google.golang.org/protobuf v1.25.0
go: downloading golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
go: downloading golang.org/x/net v0.0.0-20220812174116-3211cb980234
go: downloading google.golang.org/protobuf v1.28.1
go: downloading golang.org/x/text v0.3.7
go: downloading golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de
go: downloading golang.org/x/sys v0.0.0-20200808120158-1030fc2bf1d9
go: downloading github.com/schollz/closestmatch v2.1.0+incompatible
go: downloading golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
go: downloading golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
go: downloading gopkg.in/ini.v1 v1.57.0
go: downloading gopkg.in/ini.v1 v1.67.0
go: downloading github.com/ryanuber/columnize v2.1.0+incompatible
go: downloading github.com/CloudyKit/jet/v4 v4.1.0
go: downloading github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible
go: downloading github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385
go: downloading github.com/ryanuber/columnize v2.1.2+incompatible
go: downloading github.com/iris-contrib/jade v1.1.4
go: downloading github.com/CloudyKit/jet v2.1.2+incompatible
go: downloading github.com/iris-contrib/pongo2 v0.0.1
go: downloading github.com/kataras/blocks v0.0.2
go: downloading github.com/yosssi/ace v0.0.5
go: downloading github.com/kataras/blocks v0.0.6
go: downloading github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742
go: downloading github.com/chris-ramon/douceur v0.2.0
go: downloading github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: downloading github.com/vmihailenco/tagparser v0.1.1
go: downloading google.golang.org/appengine v1.6.5
go: downloading github.com/vmihailenco/tagparser v0.1.2
go: downloading github.com/shurcooL/sanitized_anchor_name v1.0.0
go: downloading google.golang.org/appengine v1.6.7
go: downloading github.com/google/uuid v1.1.2-0.20200519141726-cb32006e483f
go: downloading github.com/google/uuid v1.3.0
go: downloading github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53
go: downloading github.com/valyala/bytebufferpool v1.0.0
go: downloading github.com/aymerick/douceur v0.2.0
go: downloading github.com/gorilla/css v1.0.0
go: downloading github.com/golang/protobuf v1.4.1
go: downloading github.com/golang/protobuf v1.5.2
go: downloading github.com/vmihailenco/tagparser/v2 v2.0.0
go: added github.com/BurntSushi/toml v1.2.0
go: added github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53
go: added github.com/CloudyKit/jet/v4 v4.1.0
go: added github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06
go: added github.com/andybalholm/brotli v1.0.4
go: added github.com/aymerick/douceur v0.2.0
go: added github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible
go: added github.com/chris-ramon/douceur v0.2.0
go: added github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385
go: added github.com/fatih/structs v1.1.0
go: added github.com/golang/protobuf v1.5.2
go: added github.com/google/uuid v1.3.0
go: added github.com/gorilla/css v1.0.0
go: added github.com/iris-contrib/jade v1.1.4
go: added github.com/iris-contrib/pongo2 v0.0.1
go: added github.com/iris-contrib/schema v0.0.6
go: added github.com/json-iterator/go v1.1.12
go: added github.com/kataras/blocks v0.0.6
go: added github.com/kataras/golog v0.1.7
go: added github.com/kataras/iris v0.0.2
go: added github.com/kataras/pio v0.0.10
go: added github.com/kataras/sitemap v0.0.5
go: added github.com/kataras/tunnel v0.0.4
go: added github.com/klauspost/compress v1.15.9
go: added github.com/microcosm-cc/bluemonday v1.0.19
go: added github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd
go: added github.com/modern-go/reflect2 v1.0.2
go: added github.com/russross/blackfriday/v2 v2.1.0
go: added github.com/ryanuber/columnize v2.1.2+incompatible
go: added github.com/schollz/closestmatch v2.1.0+incompatible
go: added github.com/shurcooL/sanitized_anchor_name v1.0.0
go: added github.com/valyala/bytebufferpool v1.0.0
go: added github.com/vmihailenco/msgpack/v5 v5.3.5
go: added github.com/vmihailenco/tagparser v0.1.2
go: added github.com/vmihailenco/tagparser/v2 v2.0.0
go: added github.com/yosssi/ace v0.0.5
go: added golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa
go: added golang.org/x/net v0.0.0-20220812174116-3211cb980234
go: added golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab
go: added golang.org/x/text v0.3.7
go: added golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9
go: added google.golang.org/appengine v1.6.7
go: added google.golang.org/protobuf v1.28.1
go: added gopkg.in/ini.v1 v1.67.0
go: added gopkg.in/yaml.v3 v3.0.1

    安装完毕之后,可以打开项目中go.mod文件查看Iris的依赖列表:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
module IrisBlog

go 1.18

require (
	github.com/BurntSushi/toml v1.2.0 // indirect
	github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 // indirect
	github.com/CloudyKit/jet/v4 v4.1.0 // indirect
	github.com/CloudyKit/jet/v6 v6.1.0 // indirect
	github.com/Shopify/goreferrer v0.0.0-20220729165902-8cddb4f5de06 // indirect
	github.com/andybalholm/brotli v1.0.4 // indirect
	github.com/aymerick/douceur v0.2.0 // indirect
	github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible // indirect
	github.com/chris-ramon/douceur v0.2.0 // indirect
	github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 // indirect
	github.com/fatih/structs v1.1.0 // indirect
	github.com/flosch/pongo2/v4 v4.0.2 // indirect
	github.com/golang/protobuf v1.5.2 // indirect
	github.com/golang/snappy v0.0.4 // indirect
	github.com/google/uuid v1.3.0 // indirect
	github.com/gorilla/css v1.0.0 // indirect
	github.com/iris-contrib/jade v1.1.4 // indirect
	github.com/iris-contrib/pongo2 v0.0.1 // indirect
	github.com/iris-contrib/schema v0.0.6 // indirect
	github.com/josharian/intern v1.0.0 // indirect
	github.com/json-iterator/go v1.1.12 // indirect
	github.com/kataras/blocks v0.0.6 // indirect
	github.com/kataras/golog v0.1.7 // indirect
	github.com/kataras/iris v0.0.2 // indirect
	github.com/kataras/iris/v12 v12.2.0-beta4.0.20220813060700-f91269130ed3 // indirect
	github.com/kataras/pio v0.0.10 // indirect
	github.com/kataras/sitemap v0.0.5 // indirect
	github.com/kataras/tunnel v0.0.4 // indirect
	github.com/klauspost/compress v1.15.9 // indirect
	github.com/mailgun/raymond/v2 v2.0.46 // indirect
	github.com/mailru/easyjson v0.7.7 // indirect
	github.com/microcosm-cc/bluemonday v1.0.19 // indirect
	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
	github.com/modern-go/reflect2 v1.0.2 // indirect
	github.com/russross/blackfriday/v2 v2.1.0 // indirect
	github.com/ryanuber/columnize v2.1.2+incompatible // indirect
	github.com/schollz/closestmatch v2.1.0+incompatible // indirect
	github.com/shurcooL/sanitized_anchor_name v1.0.0 // indirect
	github.com/sirupsen/logrus v1.8.1 // indirect
	github.com/tdewolff/minify/v2 v2.12.0 // indirect
	github.com/tdewolff/parse/v2 v2.6.1 // indirect
	github.com/valyala/bytebufferpool v1.0.0 // indirect
	github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect
	github.com/vmihailenco/tagparser v0.1.2 // indirect
	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
	github.com/yosssi/ace v0.0.5 // indirect
	golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa // indirect
	golang.org/x/net v0.0.0-20220812174116-3211cb980234 // indirect
	golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab // indirect
	golang.org/x/text v0.3.7 // indirect
	golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9 // indirect
	google.golang.org/appengine v1.6.7 // indirect
	google.golang.org/protobuf v1.28.1 // indirect
	gopkg.in/ini.v1 v1.67.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
)

    接着在项目的根目录建立main入口文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package main

import "github.com/kataras/iris/v12"

func main() {
  app := iris.New()
  app.Use(iris.Compression)

  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("你好 <strong>%s</strong>!", "女神")
  })

  app.Listen(":5000")
}

    随后在终端启动Iris服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go run main.go

    系统返回:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Iris Version: 12.2.0-beta4

Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.

    还等什么?访问http://localhost:5000

    万唤千呼始出来。

    使用快捷键control+C可以终止服务,随后可以再次运行go run main.go来重新编译启动服务。

    Iris项目热重启机制:fresh

    众所周知,由于Go lang是编译型语言,每次修改代码之后都需要重新编译,Iris目前没有内置代码热更新的工具,这里我们可以使用三方包:fresh,如此,可以大幅提高我们的Iris开发效率,在非项目目录执行命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
go get github.com/pilu/fresh

    注意,这里一定不能在项目的目录中执行安装命令,因为go mod模式会认为是项目依赖包,而不会在当前系统的bin目录下生成可执行命令fresh。

    随后进入项目目录:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd IrisBlog

    使用fresh命令启动Iris服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Users\liuyue\www\iriblog>fresh
0:19:33 runner      | InitFolders
0:19:33 runner      | mkdir ./tmp
0:19:33 watcher     | Watching .
0:19:33 main        | Waiting (loop 1)...
0:19:33 main        | receiving first event /
0:19:33 main        | sleeping for 600 milliseconds
0:19:33 main        | flushing events
0:19:33 main        | Started! (5 Goroutines)
0:19:33 main        | remove tmp\runner-build-errors.log: The system cannot find the file specified.
0:19:33 build       | Building...
0:19:44 runner      | Running...
0:19:45 main        | --------------------
0:19:45 main        | Waiting (loop 2)...
0:19:46 app         | Iris Version: 12.2.0-beta4
0:19:46 app         |
0:19:46 app         | Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.

    此时,项目内所有包文件都会被监控,当代码被修改后,会自动触发编译动作,原理大概相当于Python中Tornado框架的事件循环机制。

    当我们修改代码之后,fresh会监控到修改动作,然后立刻build:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Application started. Press CTRL+C to shut down.
0:28:02 watcher     | sending event ".\\main.go": MODIFY
0:28:02 watcher     | sending event ".\\main.go": MODIFY
0:28:02 main        | receiving first event ".\\main.go": MODIFY
0:28:02 main        | sleeping for 600 milliseconds
0:28:02 main        | flushing events
0:28:02 main        | receiving event ".\\main.go": MODIFY
0:28:02 main        | Started! (8 Goroutines)
0:28:02 main        | remove tmp\runner-build-errors.log: The system cannot find the file specified.
0:28:02 build       | Building...
0:28:10 runner      | Running...
0:28:10 runner      | Killing PID 11276
0:28:11 main        | --------------------
0:28:11 main        | Waiting (loop 3)...
0:28:12 app         | Iris Version: 12.2.0-beta4
0:28:12 app         |
Now listening on: http://localhost:5000
Application started. Press CTRL+C to shut down.

    如此,就不需要手动触发代码的编译了,简单方便。

    如果有定制化需求,可以为当前项目添加配置文件runner.conf:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root:              .
tmp_path:          ./fresh
build_name:        runner_build
build_log:         runner_build_errors.log
valid_ext:         .go, .tpl, .tmpl, .html, .md, .log
no_rebuild_ext:    .tpl, .tmpl, .html
ignored:           assets, tmp, log
build_delay:       3000
colors:            1
log_color_main:    cyan
log_color_build:   yellow
log_color_runner:  green
log_color_watcher: magenta
log_color_app:     red

    可以定制化诸如监听的文件、编译日志、忽略文件和目录,编译延迟等等操作。

    修改定制化配置文件后,针对配置文件启动fresh服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fresh -c runner.conf

    如此,fresh服务会根据配置文件来进行监听编译动作。

    结语

    最低的系统资源开销,最高的单位时间网络请求吞吐量,这是彩虹女神Iris对开发者们最好的馈赠,当我们安装好Iris并且配置好热重启机制时,我们也就走下了Go语言web开发万里长征的第一步,山高路远,城高池深,虽然前路艰险,但就算是莽撞地开始,拙劣地完成,也好过眼高手低而不去做,你同意吗?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发。现在我们来看看Iris的基础功能,如何编写项目入口文件以及配置路由系统。
用户9127725
2022/09/22
3790
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-模板与数据库EP02
    书接上回,上次我们搭建好了项目入口文件,同时配置了路由体系,接着就可以配置项目的模板了,这里我们采用Iris内置的模板引擎,事实上,采用模板引擎并不意味着前后端耦合,模板中的数据保持其独立性即可,也就是说模板的数据操作交互方式采用http接口请求的形式,Iris并不参与模板逻辑,只返回Json格式的数据即可。前端集成数据双向绑定机制的框架Vue.js。
用户9127725
2022/09/23
6360
层次分明井然有条,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang包管理机制(package)EP10
    Go lang使用包(package)这种概念元素来统筹代码,所有代码功能上的可调用性都定义在包这个级别,如果我们需要调用依赖,那就“导包”就行了,无论是内部的还是外部的,使用import关键字即可。但事情往往没有那么简单,Go lang在包管理机制上走了不少弯路,虽然1.18版本的包管理已经趋于成熟,但前事不忘后事之师,我们还是需要了解一下这段历史。
用户9127725
2022/09/21
2520
2022-04-05:golang中go.mod文件,做框架开发需要解析,请问如何解析?
2022-04-05:golang中go.mod文件,做框架开发需要解析,请问如何解析?
福大大架构师每日一题
2022/04/05
2080
Golang中的包管理工具 - Go Modules
在Go1.5之前使用GOROOT和GOPATH这2个系统环境变量来决定包的位置,对于开发者主要使用GOPATH。GOPATH 解决了第三方源码依赖的问题,看一下我本机 $GOPATH/src 下的目录:
猿哥
2019/08/01
1.6K0
用go-module作为包管理器搭建go的web服务器
本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档。
SH的全栈笔记
2019/10/20
1.7K0
The Things Network LoRaWAN Stack V3 学习笔记 1.2 源码编译 - 190821
源码编译是重头戏,这节笔记记录如何使用 make 命令编译相关部件。由于部分包在墙外,带来了一点麻烦,还分享一个 GO 翻墙利器。
twowinter
2020/04/17
1.1K0
Go语言学习(十)| module 使用
go module 是在go 1.11版本才开始有的,需要将环境变量 GO111MODULE 设置为 on 才能正常使用
Mervyn
2020/07/21
3910
【One by one系列】一步步学习Golang web框架Gin
cd $gopath\src\github.com\carfield\Webapi
DDGarfield
2022/06/23
2430
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
    前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Token,并且通过Iris的中间件(Middleware)进行鉴权操作。
用户9127725
2022/09/27
5880
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-完善用户管理EP04
    书接上回,上一回我们完成了用户管理页面的构建,并且通过前端的Vue.js框架动态地获取表单数据,同时异步请求后端Iris接口进行入库操作,过程中使用函数封装可复用的逻辑。 本回我们将继续完善用户管理功能。
用户9127725
2022/09/23
6030
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-完善用户管理EP04
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目结构优化EP05
    前文再续,上一回我们完成了用户管理模块的CURD(增删改查)功能,功能层面,无甚大观,但有一个结构性的缺陷显而易见,那就是项目结构过度耦合,项目的耦合性(Coupling),也叫耦合度,进而言之,模块之间的关系,是对项目结构中各模块间相互联系紧密程度的一种量化。耦合的强弱取决于模块间调用的复杂性、调用模块之间的方式以及通过函数或者方法传送数据对象的多少。模块间的耦合度是指模块之间的依赖关系,包括包含关系、控制关系、调用关系、数据传递关系以及依赖关系。项目模块的相互依赖越多,其耦合性越强,同时表明其独立性越差,愈加难以维护。
用户9127725
2022/09/27
5870
GO 依赖管理工具go Modules(官方推荐)
以前写过一篇关于go管理依赖包工具 dep的文章,当时认为dep将会成为官方依赖工具,现在看来是自己图样图斯内幕破了,正如官方一直提到dep是“official experiment”官方实验项目的那样,随着go modules 在go1.11版推出,go1.12版功能不断改进,再到go1.13版完善优化,正式扶正。预计dep将来也只能定格在“official experiment”了。
孤烟
2020/09/27
1.8K1
Go Modules 终极入门
Go modules 是 Go 语言中正式官宣的项目依赖解决方案,Go modules(前身为vgo)于 Go1.11 正式发布,在 Go1.14 已经准备好,并且可以用在生产上(ready for production)了,Go 官方也鼓励所有用户从其他依赖项管理工具迁移到 Go modules。
madneal
2020/03/10
1.9K0
Go Modules 终极入门
Golang Module的使用 顶
注意:go mod 还有一些其他比较有意思的工具,比如可以打印依赖树,比如可以查看哪些模块在哪些包引用了
BGBiao
2019/09/09
1.3K0
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03
    前文再续,之前一篇我们已经配置好了数据库以及模板引擎,现在可以在逻辑层编写具体业务代码了,博客平台和大多数在线平台一样,都是基于用户账号体系来进行操作,所以我们需要针对用户表完成用户账号的CURD操作。
用户9127725
2022/09/23
6140
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03
Go mod包依赖管理工具使用详解
对比上面几点: 目前做的最好的也就 maven了,gradle没有使用过,不知道。
OwenZhang
2021/12/08
1K0
Go mod包依赖管理工具使用详解
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
    书接上回,上一回我们按照“低耦合高内聚”的组织架构方针对项目的整体结构进行了优化,本回将会继续编写业务,那就是用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,校验通过后留存当前登录用户的信息,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。
用户9127725
2022/09/26
4490
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
Hyperledger fabric-sample 部署测试(基于 Ubuntu)
配置 Go 环境,在 $HOME/.profile 或者 /etc/profile 中添加:
子乾建建-Jeff
2021/02/04
1.8K0
go mod使用
最近由于换工作,开始交接工作。整理以前的工作内容,由于组内就我一个在做go和大数据。 所以开发没有规划,当时是怎么快怎么来。go也是使用最传统的go path的方式管理的。都是手动管理依赖的。现在交接给他人,需要多人开发,发现很多问题。比如版本问题,各种依赖的问题等等。
若与
2020/05/18
1.6K0
推荐阅读
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
3790
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-模板与数据库EP02
6360
层次分明井然有条,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang包管理机制(package)EP10
2520
2022-04-05:golang中go.mod文件,做框架开发需要解析,请问如何解析?
2080
Golang中的包管理工具 - Go Modules
1.6K0
用go-module作为包管理器搭建go的web服务器
1.7K0
The Things Network LoRaWAN Stack V3 学习笔记 1.2 源码编译 - 190821
1.1K0
Go语言学习(十)| module 使用
3910
【One by one系列】一步步学习Golang web框架Gin
2430
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
5880
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-完善用户管理EP04
6030
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目结构优化EP05
5870
GO 依赖管理工具go Modules(官方推荐)
1.8K1
Go Modules 终极入门
1.9K0
Golang Module的使用 顶
1.3K0
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-用户系统EP03
6140
Go mod包依赖管理工具使用详解
1K0
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-登录与图形验证码(captcha)EP06
4490
Hyperledger fabric-sample 部署测试(基于 Ubuntu)
1.8K0
go mod使用
1.6K0
相关推荐
彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验