gin

gin 怎么写个简单的中间件

我们两清 提交于 2020-08-14 05:38:34
gin 写个简单中间件,直接上例子: func GinServer() { engine := gin.Default() engine.Use(TestMiddleware) engine.GET("/", func(context *gin.Context) { context.JSON(http.StatusOK, "test") }) engine.Run(":8080") } func TestMiddleware(context *gin.Context) { fmt.Println("这是一个简单的中间件") } 这个例子最主要的方法是Use,看下Use方法 // Use attaches a global middleware to the router. ie. the middleware attached though Use() will be // included in the handlers chain for every single request. Even 404, 405, static files... // For example, this is the right place for a logger or error management middleware. func (engine *Engine) Use

中科院计算所沈华伟:图神经网络表达能力的回顾和前沿

五迷三道 提交于 2020-08-14 04:19:11
     作者 | 蒋宝尚   编辑 | 丛末   6月23日,中科院计算所的研究员、智源研究院的智源青年科学家沈华伟老师在第二届北京智源大会上做了《图神经网络的表达能力》的报告。   在报告中,沈华伟老师提到: 这几年,虽然图神经网络在其他领域大量应用,但“内核”仍然停滞不前 , 目前设计新图神经网络(GNN)的两种常用方式都在面临理论上的瓶颈。   沈华伟老师还对近几年图神经网络表达能力的相关研究进行了梳理,他说:“GNN出现的早期,大家对它表达能力的认识是基于其在半监督学习,尤其是节点分类任务上的优秀表现,一些应用向的研究也只是对图神经网络表达能力经验上的证明”。   基于这个认知,在介绍完图神经网络的基本知识之后,沈华伟老师对图神经网络的表达能力给予了理论上的介绍。   以下是演讲全文,AI科技评论做了不改变原意的整理。 此文经过沈老师修改。      图神经网络过去几年炙手可热,也取得了一系列的突破,但是这两年发展进入了相对停滞的状态。   当前更多的研究员是把图神经网络当做一个工具,也即把图神经网络泛化到其他领域进行应用方向的研究。例如早期图神经网络在节点分类、链路预测以及图分类上取得了一些进展之后,很快就用在了其他领域,包括推荐领域、自然语言处理领域等等。      其实,图神经网络“内核”仍然停滞不前 。为什么呢?因为在设计新GNN的时候通常有两种方式

从别人的代码中学习golang系列--01

时光毁灭记忆、已成空白 提交于 2020-08-13 14:07:50
自己最近在思考一个问题,如何让自己的代码质量逐渐提高,于是想到整理这个系列,通过阅读别人的代码,从别人的代码中学习,来逐渐提高自己的代码质量。本篇是这个系列的第一篇,我也不知道自己会写多少篇,但是希望自己能坚持下去。 第一个自己学习的源码是: https://github.com/LyricTian/gin-admin 自己整理的代码地址: https://github.com/peanut-pg/gin_admin 这篇文章整理的时候只是为了跑起来整体的代码,对作者的代码进行精简。 这篇博客主要是阅读gin-admin的第一篇,整理了从代码项目目录到日志库使用中学习到的内容: 项目目录规范 配置文件的加载 github.com/sirupsen/logrus 日志库在项目的使用 项目的优雅退出 Golang的选项模式 项目目录规范 作者的项目目录还是非常规范的,应该也是按照https://github.com/golang-standards/project-layout 规范写的,这个规范虽然不是官方强制规范的,但是确实很多开源项目都在采用的,所以我们在生产中正式的项目都应该尽可能遵循这个目录规范标准进行代码的编写。关于这个目录的规范使用,自己会在后续实际使用中逐渐完善。 /cmd main函数文件(比如 /cmd/myapp.go )目录,这个目录下面

从设计到开发,实现一个人人都可以简单使用及管理的工作流系统

核能气质少年 提交于 2020-08-13 04:32:34
工作流介绍 工作流(Workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。 工作流在IT领域不算是“新人”了,工作流思想在上世纪60年代就有人提出过;70年代就有人开始尝试,但是由于当时许多的限制,工作流一直没有成功的被实现;80年代才出现第一批成功的工作流系统;90年代工作流技术走向了第一个发展高峰期;90年代后至今工作流出现了很多版本,但是主旨还是不变的,为了使我们的工作变得更加高效。 我们通过工作流可以节省很多不必要的时间,预设置好的处理人,可以让我们不必反复的问别人谁负责此节点;通过任务来实现最后的操作,可以让我们减少很多人力成本,当然想要实现一套完善、简单、通用、方便管理的工作流系统也是非常不容易的,接下来推荐一个较为通用的,方便使用及管理的工作流系统。 Demo: 工作流系统(ferry) 项目问答社区: 问答社区 此工作流系统使用的技术栈: Golang Gin Gorm Vue Element 数据结构设计 对于一个完整的工作流系统来说,我们需要有流程、模版、分组、用户、任务等等,并且这些东西都是可以灵活定制的,因为如果不能灵活定制的话,对于普通的使用这来说是非常不方便的,所以对于一个好的工作流系统,是必须要实现灵活性的。 下面直接来展示一下,数据结构的设计图。

Go语言学习教程

六月ゝ 毕业季﹏ 提交于 2020-08-13 03:07:15
我关于Go语言的博客原本发布于我的个人网站: wwww.liwenzhou.com 。 但是被某些人抄怕了,没办法只好搬运到博客园。 我的Go语言学习之路 《Go语言学习之路》博客目录。 2015年底我因为工作原因接触到了Go语言,那时网上关于Go语言的学习资料不多,好在一直坚持到现在。我把自己学习Go语言的笔记都整理到这里,希望能给Go社区的发展出一点绵薄之力,帮助更多的人加入Gopher大家庭。 Go语言介绍 为什么你应该学习Go语言? → B站视频链接 开发环境准备 从零开始搭建Go语言开发环境 → B站视频链接 VS Code配置Go语言开发环境 → B站视频链接 Go语言基础 Go语言基础之变量和常量 → B站视频链接 Go语言基础之基本数据类型 → B站视频链接 Go语言基础之运算符 → B站视频链接 Go语言基础之流程控制 → B站视频链接 Go语言基础之数组 → B站视频链接 Go语言基础之切片 → B站视频链接 Go语言基础之map → B站视频链接 Go语言基础之函数 B站视频01函数部分 B站视频02匿名函数和闭包部分 Go语言基础之指针 → B站视频链接 Go语言基础之结构体 B站视频01自定义类型和类型别名 B站视频02结构体定义与实例化 B站视频03方法和接收者 B站视频04结构体嵌套 B站视频05结构体字段可见性和JSON

Postgresql 全文检索测试

霸气de小男生 提交于 2020-08-12 03:08:32
Postgresql:10.11 测试表数据量:3亿 测试使用8c 16g 服务器 创建一张表: create table nt_order ( id int PRIMARY KEY, order_id text, order_time timestamp without time zone, info jsonb ); CREATE SEQUENCE nt_order_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1; alter table nt_order alter column id set default nextval('nt_order_id_seq'); 创建索引: brin索引: create index idx_nt_order_brin on nt_order using brin (order_time); 全文检索: create index idx_gin_nt_order_info on nt_order using gin(to_tsvector('english',info)); 为什么使用brin索引? 占空间小,比btree小千倍靠上 使用brin索引适用任何场景吗? brin索引适合范围查询(与btree索引比差距较小),brin索引主要用于高度相关的数据

Gin(八):cookie的使用

左心房为你撑大大i 提交于 2020-08-12 00:09:44
Cookies 接上回,如何来判断用户是否登录呢? cookie 就是一个很好的凭证, cookie 会保留到浏览器上,每次访问请求的时候就会携带上,后端通过对 cookie 的识别,来判断用户是否登录。 由此一来,首先我们是要在登录的时候保存 cookie 。修改 userHandler 中 UserLogin 代码 在判断密码正确的时候,对 cookie 进行添加。 context.SetCookie( "user_cookie", string(u.Id), 1000, "/", "localhost", false, true) 复制代码 这里来介绍一下这些参数,第一个参数为 cookie 名;第二个参数为 cookie 值;第三个参数为 cookie 有效时长,当 cookie 存在的时间超过设定时间时,cookie 就会失效,它就不再是我们有效的 cookie;第四个参数为 cookie 所在的目录;第五个为所在域,表示我们的 cookie 作用范围;第六个表示是否只能通过 https 访问;第七个表示 cookie 是否可以通过 js代码进行操作。 启动我们的项目,进行登录操作,F12 打开我们的控制台,选择Application ,在侧边栏找到 cookie,并且选择我们的站点,此时就可以在我们的右侧看到我们刚刚设置的 cookie 信息 并且有 Expires

go语言几个最快最好运用最广的web框架比较

生来就可爱ヽ(ⅴ<●) 提交于 2020-08-11 12:19:44
比较一下常用的golang web框架 令人敬畏的Web框架 如果你为自己设计一个小应用程序,你可能不需要一个Web框架,但如果你正在进行生产,那么你肯定需要一个,一个好的应用程序。 虽然您认为自己拥有必要的知识和经验,但您是否愿意自行编写所有这些功能的代码? 您是否有时间找到生产级外部包来完成这项工作? 您确定这将与您应用的其余部分保持一致吗? 这些是推动我们使用框架的原因,如果其他人已经做了这些繁琐且艰苦的工作,我们不想自己编写所有必要的功能。 介绍 Go 是一种快速增长的开源编程语言,旨在构建简单,快速,可靠的软件。 看看哪些 伟大的公司 使用Go来为他们的服务提供支持。 本文提供了所有必要的信息,以帮助开发人员了解有关使用Go开发Web应用程序的最佳选项的更多信息。 本文包含了最详细的框架比较,通过从尽可能多的角度比较最知名的Web框架:流行度,支持和内置功能: Beego:Go编程语言的开源,高性能Web框架。 https://github.com/astaxie/beego https://beego.me Buffalo:快速Web开发w/Go。 https://github.com/gobuffalo/buffalo https://gobuffalo.io Echo:高性能,极简主义的Go Web框架。 https://github.com/labstack

golang依赖包下载失败?试试GO依赖管理工具go Modules配置goproxy代理

浪子不回头ぞ 提交于 2020-08-11 12:00:20
这里写目录标题 一.前言 二. Go Modules有哪些特点 三.如何使用Go Modules 1.首先安装Go 1.13或升级到Go 1.13 2.配置环境变量 3.配置gomod 四.配置goland 五.其他你可能需要知道的知识 1.go.sum 2.更换依赖版本 3.gomod相关命令 一.前言 初学者使用golang的时候可能会遇到这样几个问题 1.在使用go get的时候,由于一些众所周知的原因,经常会下载失败 2.拿到一个项目,很难知道使用了哪些依赖库,这些依赖库都是什么版本的 3.go的项目必须放在gopath下面,我想放在任意目录下 如果你有相同的疑问,那么go Modules就能很好的解决这些问题 二. Go Modules有哪些特点 Go Modules是官方正式推出的包依赖管理项目,由Russ Cox (即Go 现在的掌舵人)推动,dep是“official experiment”仅此而已。 Go modules 出现的目的之一就是为了解决 GOPATH 的问题,也就相当于是抛弃 GOPATH 了。以前项目必须在 G O P A T H / s r c 里 进 行 , 现 在 G o 允 许 在 GOPATH/src 里进行,现在Go 允许在 G O P A T H / s r c 里 进 行 , 现 在 G o 允 许 在 GOPATH

gin+gorm 用户服务

时光毁灭记忆、已成空白 提交于 2020-08-11 07:31:21
package main import ( "fmt" "github.com/gin-gonic/gin" "github.com/jinzhu/gorm" _ "github.com/jinzhu/gorm/dialects/mysql" ) var db *gorm.DB var err error type User struct { ID int `json:id` Name string `json:"name"` Age int `json:"age"` Sex int `json:"sex"` } func main() { db,_ = gorm.Open("mysql","root:root@tcp(192.168.40.10:3306)/wang?charset=utf8&parseTime=True&loc=Local") if err != nil{ fmt.Println(err) return } else { fmt.Println("connect success") } defer db.Close() db.AutoMigrate(&User{}) r := gin.Default() // 用户管理 r.GET("/",getUserList) r.GET("/user/:id",getUserInfo) r.GET("/users"