Go语言中文网 为您找到相关结果 636

Golang Web入门(3):如何优雅的设计中间件

Golang Web入门(1):自顶向下理解Http服务器 Golang Web入门(2):如何实现一个RESTful风格的路由 Golang Web入门(3):如何优雅的设计中间件 Golang Web入门(4):如何设计API 摘要 在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了。但是,在Web应用的开发中,我们还需要一些可以被扩展的功能。 因此,在设计框架的过程中,应该留出可以扩展的空间,比如:日志记录、故障恢复等功能,如果我们把这些业务逻辑全都塞进Controller/Handler中,会显得代码特别的冗余,杂乱。 所以在这篇文章中,我们来探究如何更优雅的设计这些中间件。 1 耦合的实现方式 比如我们要实现一个日志记录的功能,我们可以用这种简单粗暴的方...阅读全文

博文 2020-04-23 11:34:35 红鸡菌

Gin框架中使用JWT进行接口认证

背景: 在如今前后端分离开发的大环境中,我们需要解决一些登陆,后期身份认证以及鉴权相关的事情,通常的方案就是采用请求头携带token的方式进行实现。本篇文章主要分享下在Golang语言下使用jwt-go来实现后端的token认证逻辑。 JSON Web Token(JWT)是一个常用语HTTP的客户端和服务端间进行身份认证和鉴权的标准规范,使用JWT可以允许我们在用户和服务器之间传递安全可靠的信息。 在开始学习JWT之前,我们可以先了解下早期的几种方案。 token、cookie、session的区别 Cookie Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie。 内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是...阅读全文

博文 2020-03-15 21:32:52 BGbiao

Does anyone have any examples of dependency injection via context in Gin or something similar?

<p>I noticed this Stack Overflow post the other day: <a href="http://stackoverflow.com/questions/35672842/go-and-gin-passing-around-struct-for-database-context" rel="nofollow">http://stackoverflow.com/questions/35672842/go-and-gin-passing-around-struct-for-database-context</a> </p> <p>I&#39;ve been...阅读全文

golang struct json tags and gin output

<p>I have a struct that is storing values from an API, the json tags are being used to match what the API is returning.</p> <p>within code, if I print the struct, I see my field names. However, when I send the struct to gin, it is using the tag names.</p> <p>I am tryng to figure out how to either use the struct field...阅读全文

资源 2017-08-10 09:00:10 blov

[系列] - go-gin-api 路由中间件 - 日志记录(三)

概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可。 这篇文章咱们分享:路由中间件 - 日志记录。 日志是特别重要的一个东西,方便我们对问题进行排查,这篇文章我们实现将日志记录到文本文件中。 这是我规划的,需要记录的参数: - request 请求数据 - request_time - request_method - request_uri - request_proto - request_ua - request_referer - request_post_data - request_client_ip - response 返回数据 ...阅读全文

博文 2019-09-05 19:32:42 新亮

半小时快速上手golang web编程之用户的增删改查

一.课程目标 本课程目标是让新手能够在最短的时间内了解到golang的增删改查流程. 从而让入门web开发更加容易. 本实例是快速实现一个用户的增删改查, 采用前后端分离模式, 后端采用gorose orm + gin框架完成api的开发, 前端使用原生html+css+jquery+ajax交互数据. 本项目源码已经发布到github: https://github.com/gohouse/go... 二.安装基础环境和依赖库 # 安装golang yum -y install golang # 安装gin web框架 go get https://github.com/gin-gonic/gin # 安装gorose orm框架 go get https://github.com/goh...阅读全文

博文 2019-10-31 17:02:40 fizz

使用 Go 添加文档

简介 swagger 起步 编写文档 运行 总结 当前部分的代码 简介 对于 API 服务来说, 文档是必不可少的. 然而文档却挺烦人的, 尤其是同步更新的问题. 如果选择手写文档, 经常会忘了更新文档; 或者处于高速开发的前期, 来不及更新文档. 现在更推崇的方式是文档即注释, 就是将文档作为注释, 和代码同步更新, 使用自动生成文档的方式实时更新. 另一种概念是文档即测试, 让文档不但能看, 也能用, 这对于 API 文档来说, 是一个巨大的便利. 有了它, 再也不用一边看文档, 一边开着 Postman 实验了. 这就是 swagger. swagger 起步 swagger 提供了很多工具用于创建 API 文档, 尤其是创建了 RESTful APIs 标准. 这个 RESTful ...阅读全文

博文 2019-11-11 17:35:24 帅气猫咪

前端工程师吐后端工程师(第五讲)——包管理工具NPM和Go get

在我们做前端时候,很少会有人做需求的时候上去就什么脚手架都不用直接裸写,基本都会找个所谓的框架,比如三大框架:Angular、Vue、React。所以在做Go的时候我们也不会裸写,需要选个Go的框架。 对比了一下,现在盛行的Go框架,选择了Gin。Gin是一个golang的微框架,API比较友好,源码注释文档非常优秀,具有快速灵活,容错方便等特点。其实对于go而言,web框架的依赖要远比Python,Java、PHP要小。自身的net/http足够简单,性能也非常不错。支持命名路径参数和通配符、支持路由分组、支持数据渲染器。 但是在使用这里之前我需要先把Gin框架下载下来,这就涉及到一门语言的另一个重要功能——包管理工具。我们可以把他理解为前端Nodejs的npm,与Nodejs不同的是,N...阅读全文

golang-gin入门资料

下载地址 官网文档 一个实例 Gin is a HTTP web framework written in Go (Golang). It features a Martini-like API with much better performance -- up to 40 times faster. If you need smashing performance, get yourself some Gin. https://gin-gonic.com/ Gin是一个用Go写成的HTTP服务器。他像Martini-like,但是比其快了40倍。如果想体验极速,开始使用Gin吧。 初看项目在github里面star 34.7k。 安装 golang 1.11+ go get -u git...阅读全文

博文 2020-01-15 09:32:41 阿彪2020

轻松搭建基于 Serverless 的 Go 应用(Gin、Beego 举例)

首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。函数计算更多信息 参考。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API 网关、日志服务等资源。它通过一个资源配置文件(template.yml),协助您进行开发、构建、部署操作。Fun 的更多文档 参考。 备注: 本文介绍的技巧需要 Fun 版本大于等于 3.6.4。 效果预览 本文涉及到的两个应用示例部署后的链接,点击预览效果: Gin 简单示例:...阅读全文

博文 2020-03-18 18:32:46 阿里巴巴云原生

Go起步

准备 下载Go安装 安装依赖管理 brew install dep 安装dep同时也会安装依赖Go 配置环境变量 vim ~/.zshrc # go export GOPATH=$HOME/Workspace/go export GOBIN=$HOME/Workspace/go/bin export PATH=$PATH:$GOBIN . ~/.zshrc 示例 mkdir -p ~/Workspace/go/src/gin-basic && cd ~/Workspace/go/src/gin-basic dep init curl https://raw.githubusercontent.com/gin-gonic/gin/master/examples/basic/main.go > ...阅读全文

博文 2018-12-15 00:34:43 诺之林

使用 Go 记录日志

简介 定义配置 读取日志相关的配置 总结 当前部分的代码 简介 在上一节内容中, 我们使用 viper 读取了配置文件. 本节将使用 logrus 记录日志. logrus 是一个结构化的日志记录器, 和标准库中的 logger 具有完全兼容的 API. 定义配置 首先, 更新一下配置文件, 加入以下参数: log: use_json: true logger_level: debug logger_file: log/server.log gin_file: log/gin.log gin_console: true logrus 支持使用 JSON 格式记录日志: logrus.SetFormatter(&log.JSONFormatter{}) 第二三参数设置了日志的记录级别和日志保存...阅读全文

博文 2019-09-16 20:02:37 帅气猫咪

go+typescript+graphQL+react构建简书网站(一) 初始化Go后端

项目地址:github 学习go已有一段时间,自觉可以做些什么。受社区的启发,便把构建一个属于自己的简书网站当作课业,并决定同时写下此篇,用于给自己厘清思路,发散思维,不至于全在脑子里混沌,一团浆糊,终不成事。 课业规划,均来自社区课程:《用Go实现一个简书》。 建立Go项目 go mod init github.com/unrotten/hello-world-web新建项目后,在项目目录中,使用go modules初始化项目。 建立目录如下: cmd/hello-world-web:存放程序入口main.go文件 config:存放配置文件 controller:由于本项目将使用GraphQL API——graphql库实现,故而此目录将用于graphQL的定义 middlewire:中...阅读全文

博文 2020-02-29 20:32:41 云燕

vue golang 同一台机器开发环境配置

golang 服务端 package main import ( "net/http" "github.com/gin-gonic/gin" ) type MoneyType struct { ID int `json:"id"` Name string `json:"name"` Code string `json:"code"` } func main() { r := gin.Default() // 添加静态资源路径 r.Static("/static", "./dist/static") r.GET("/hello", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "msg": "hello", }) }) r.GET("/...阅读全文

博文 2019-03-28 13:34:41 吴宪峰

golang 小结

最近使用 golang 把公司 node.js 项目 holoread 重写了一下, 大约花费三个工作日, 说说经验吧, 先说 golang 的优势, 容易部署, 二进制文件即可, 服务器上不需要装一堆环境, 全局依赖管理, 不像 npm 每个项目文件夹都有 node_modules, 导致电脑硬盘占用 强制 format 代码, 有利有弊 ... 缺点都是别人吐槽过了 time format 特别蛋疼, 特别特别蛋疼 高阶函数写起来很难看 依赖版本 泛型 文件夹做 package ... 来看下代码. main 函数, 非常简单 func main() { r := gin.New() db, store := database.Connect() r.Use(SetDB(db)) r.U...阅读全文

博文 2017-08-13 05:05:00 ericjj

Golang Gin实践 番外 请入门 Makefile

Golang Gin实践 番外 请入门 Makefile 前言 含一定复杂度的软件工程,基本上都是先编译 A,再依赖 B,再编译 C...,最后才执行构建 如果每次都人为编排,又或是每新来一个同事就问你项目 D 怎么构建、重新构建需要注意什么...等等情况,岂不是要崩溃? 我们常常会在开源项目中发现 Makefile,你是否有过疑问? 本章节会简单介绍 Makefile 的使用方式,最后建议深入学习 怎么解决 对于构建编排,Docker 有 Dockerfile ,在 Unix 中有神器 Make .... Make 是什么 Make 是一个构建自动化工具,会在当前目录下寻找 Makefile 或 makefile 文件。如果存在,会依据 Makefile 的构建规则去完成构建 当然了,实际...阅读全文

博文 2019-07-06 00:00:42 EDDYCJY

Can I use Google authentication but restrict which users have access to my private golang app?

<p>I&#39;m building a web application for my girlfriend&#39;s company. I have them set up with Google apps for mail, drive, calendar, and contacts services. Instead of building out my own authentication layer, I&#39;m hoping to utilize some sort of existing Google authentication.</p> <p>My only requirement is that I m...阅读全文

基于Go博客wblog的理解和修改。

初衷 ​ 自学Go语言已经一段时间,想通过博客更深入理解go语言。最终通过Gin语言定位了wblog博客框架。wblog是基于基于gin+gorm开发的个人博客项目。 ​ 学习别人的博客是一个抓狂的过程,不仅要疯狂学习扩展的知识,比如gin框架,gorm,还要理解原作者的思想和构建过程。 ​ 原项目仅做了简单的英文注释。我则根据原项目增添了很多自己理解的注释和说明,方便其他后来人学习参考。同时更新原项目依赖,可以一键运行。 修改 增加了中文注释,更多的是我对原项目的理解,方便其他人理解和学习。 使用go module替代了govendor依赖管理包,更方便目前的运行方式。 更新了代码中的依赖包,比如session中的代码。 将默认使用的数据库修改为Mysql。并将时间格式设置为charset...阅读全文

博文 2020-02-06 17:33:19 moakia

[系列] - go-gin-api 路由中间件 - 捕获异常(四)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常。当系统发生异常时,提示 “系统异常,请联系管理员!”,同时并发送 panic 告警邮件。 什么是异常? 在 Go 中异常就是 panic,它是在程序运行的时候抛出的,当 panic 抛出之后,如果在程序里没有添加任何保护措施的话,控制台就会在打印出 panic 的详细情况,然后终止运行。 我们可以将 panic 分为两种: 一种是有意抛出的,比如, panic("自定义的 panic 信息") 复制代码输出: 2019/09/10 20:25:27 http: panic serving [::1]:61547: 自定义的 panic 信息 goroutine 8 [runnin...阅读全文

博文 2019-09-11 13:04:20 訢亮

Context package necessary to pass variables between handlers?

<p>Is a context package such as the one from Google or gorilla/context really needed to pass variables between handlers?</p> <p>I&#39;ve read a few blog posts and they seem to use some sort of context package to achieve this. Some solutions are implementing a global map with a mutex, or implementing a struct that embeds the ...阅读全文

[系列] - 使用 go modules 包管理工具(一)

概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加。 废话不多说,咱们开始吧。 创建一个项目,咱们首先要考虑一个依赖包的管理工具。 常见的包管理有,dep、go vendor、glide、go modules 等。 最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go modules 。 现在来说一下 go modules ,这个是随着 Go 1.11 的发布和我们见面的,这是官方提倡的新的包管理。 说一个环境变量:GO111MODULE,默认值为 auto 。 当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 v...阅读全文

博文 2019-08-27 11:34:29 訢亮

Gin(一):Hello

# 什么是 Gin > Gin 是一个用 Golang 写的 http web 框架。 这是来自 Gin [Github](https://github.com/gin-gonic/gin) 上的描述。 # 开发环境 - GoLand 2019.2 EAP - GoLang 1.11.5 - 采用 Go Modules 进行管理 # 快速入门 用 `GoLand` 新建项目的时候,我们选择 `Go Modules(vgo)` ,填写我们的项目地址和项目名称,我们命名为 `GinHello` 。 ![新建项目](https://island-hexo.oss-cn-beijing.aliyuncs.com/gin_create_new_project.jpg) 点击 `Create` ,此时 ...阅读全文

博文 2019-07-21 16:50:10 youngxhui

Unit Test In Go With Docker

本篇文章主要讲解如何在 Docker 中进行 Go 单元测试,依赖 Docker 和 Go Modules。 为什么是 Docker 在 Docker 之前我们往往需要在 Jenkins 服务器上配置不同的 Go 版本以及针对每个项目配置 GOPATH,项目之间的隔离性差,经常出现基础库版本冲突的问题。 有了 Docker,我们可以在不同容器中运行单元测试,该测试不局限不同项目,甚至可以是同一项目不同分支。 所以在测试隔离性和项目测试并发度上都有很大提升,而且测试结束后,环境清理也简单许多。 为什么是 Go Modules Go Modules 作为官方默认的包管理工具,基本解决了 Go 长期存在的包管理问题,它为我们的项目管理带来很多好处: 自动解析和添加依赖 签名验证 依赖缓存 支持相对...阅读全文

博文 2019-12-20 00:32:54 51reboot

golang 网络框架之 gin

golang 原生 http 库已经可以很方便地实现一个 http server 了,但对于复杂的 web 服务来说,路由解析,请求参数解析,对象返回等等,原生 api 就显得有些不太够用了,而 gin 是一个功能完备,性能很高的 web 网络框架,特别适合 web api 的开发 hello world package main import "github.com/gin-gonic/gin" func main() { r := gin.New() r.GET("/ping", func(c *gin.Context) { c.String(200, "hello world") }) r.Run() // listen and serve on 0.0.0.0:8080 } 如这个 ...阅读全文

golang常用代码片段--定制化gin中间件

limiter限流器中间件 作为gin中的一个中间件,起到对接口限流的作用 接口限流的配置组件每个人都不同,使用自己的就可以,本文使用的之前文章中的myConf func MyLimiter(c *gin.Context) { url := c.Request.URL.Path if limiter := myConf.GetLimiterByUrl(url); limiter != nil && !limiter.Allow() { myLog.GetUidTraceLog(c).Errorf("limit url: [%s]", url) c.AbortWithStatus(http.StatusForbidden) return } c.Next() } logger记录整体请求信息的...阅读全文

golang best practice 之 dev测试

基本过程 coding in local IDE,write unit test, add & run integrate test(tradeoff between自动化与手动,如果自动化写的少,多动手) deploy to dev environment deploy to qa or production environment. not be discussed on this page Requirement Environment in logic IDE environment for develop effectively. Should support debug interactively with ide breakpoint. Integrate Test envir...阅读全文

博文 2019-01-08 11:34:47 fstMoon

使用 Go 完成用户业务逻辑

简介 路由总览 定义 handler 校验参数 加密密码和数据库存储 其他 handler 获取用户列表 更新用户 总结 当前部分的代码 简介 在上一节中, 已经大致学习了如何使用 Gin 读写请求. 这一节就是实践了, 完成一个用户业务逻辑处理. 主要包括以下功能: 创建用户 删除用户 更新用户 查询用户列表 查询指定用户的信息 这一节是核心部分, 因为这个项目的主要功能就是在这部分实现的. 路由总览 这部分的代码改动很大, 毕竟要完成上述的功能会增加很多代码. 首先, 来看下路由, router.go 里增加了很多路由定义. u := g.Group("/v1/user") { u.GET("", user.List) u.POST("", user.Create) u.GET("/:i...阅读全文

博文 2019-10-12 15:04:22 帅气猫咪

使用 Go 读写请求

简介 读取请求参数 path 中的参数 query 中的参数 from 中的参数 模型绑定 返回响应 总结 当前部分的代码 简介 使用 web 框架, 最基础的事情就是读写请求了,Gin 支持很多种类的请求参数, 也支持多种格式的响应. 读取请求参数 path 中的参数 使用 Param() 可以获取 path 中的参数. 定义在 path 中的参数有两种格式, 一个是 :name 的以冒号开头的,另一种是 *action 的以星号开头的. :name 是必定匹配的, 一定要有值, 不能为空. 下面的代码中, 第一个例子就是如此,用 :name 来表示用户的名字, 这样就可以在路径中表示任意的用户名了. *action 是可选的, 如果不存在, 就会忽略掉, 比如是可以匹配到 /user/j...阅读全文

博文 2019-10-06 20:02:37 帅气猫咪

Go Gin 系列一:Go 介绍与环境安装

大家好,我是煎鱼,这是本项目的地址:github.com/eddycjy/go-… ,如果有什么问题欢迎随时交流和沟通。 本文目标 学会安装 Go。 知道什么是 Go。 知道什么是 Go modules。 了解 Go modules 的小历史。 学会简单的使用 Go modules。 了解 Gin,并简单跑起一个 Demo。 准备环节 安装 Go Centos 首先,根据对应的操作系统选择安装包 下载,在这里我使用的是Centos 64位系统,如下: $ wget https://studygolang.com/dl/golang/go1.13.1.linux-amd64.tar.gz $ tar -zxvf go1.13.1.linux-amd64.tar.gz $ mv go/ /usr...阅读全文

博文 2019-12-09 23:34:20 煎鱼eddycjy

Can someone, once and for all, point out how to write REST APIs in Go?

<p>There seems to be an endless number of ways people create REST APIs in Go. By the time I knew that db handlers were supposed to be transferred via context, people were already considering it bad practice. Mat Ryer suggests a struct based approach using closures and such but it doesn’t scale well to even a handful of rotes. </p> <...阅读全文

GRBAC: golang轻量级RBAC鉴权库????

项目地址:github.com/storyicon/g… Grbac是一个快速,优雅和简洁的RBAC框架。它支持增强的通配符并使用Radix树匹配HTTP请求。令人惊奇的是,您可以在任何现有的数据库和数据结构中轻松使用它。 grbac的作用是确保指定的资源只能由指定的角色访问。请注意,grbac不负责存储鉴权规则和分辨“当前请求发起者具有哪些角色”,更不负责角色的创建、分配等。这意味着您应该首先配置规则信息,并提供每个请求的发起者具有的角色。 grbac将Host、Path和Method的组合视为Resource,并将Resource绑定到一组角色规则(称为Permission)。只有符合这些规则的用户才能访问相应的Resource。 读取鉴权规则的组件称为Loader。grbac预置了一些...阅读全文

博文 2019-07-04 23:34:29 故事细腻icon

用go-module作为包管理器搭建go的web服务器

本篇博客主要介绍了如何从零开始,使用Go Module作为依赖管理,基于Gin来一步一步搭建Go的Web服务器。并使用Endless来使服务器平滑重启,使用Swagger来自动生成Api文档。 源码在此处:项目源码 大家可以先查看源码,然后再根据本篇文章,来了解搭建过程中服务器的一些细节。 搭建环境 以下所有的步骤都基于MacOS。 安装go 在这里推荐使用homebrew进行安装。当然你也可以使用源码安装。 brew install go 跑完命令之后,在命令行输入go。如果在命令行看到如下输出,则代表安装成功。 Go is a tool for managing Go source code. Usage: go [arguments] The commands ar...阅读全文

博文 2019-06-10 16:32:41 detectiveHLH

Building an API

<p>I am pretty new to API building. </p> <p>I want to build an API to a web app of mine, what approach is the best one? using JWT over normal sessions key exchange (exchange the username/password and generate a token valid for some time)?</p> <p>Edit: I have written a small book on writing webapps with Go, <a href...阅读全文

04Gin源码解读

简介 内置中间件的实现 recovery auth logger errors 总结 简介 Gin 源码解读, 基于 v1.5.0 版本. 内置中间件的实现 前面已经研究过中间件的原理了, 这次来看一下内置的中间件是如何实现的. recovery // Recovery returns a middleware that recovers from any panics and writes a 500 if there was one. func Recovery() HandlerFunc { return RecoveryWithWriter(DefaultErrorWriter) } recovery 中间件用于从 panic 中恢复, 并返回 500 响应. 在看代码之前, 首先介...阅读全文

博文 2019-12-15 10:32:38 帅气猫咪

Compiling times

<p>Hey. I recently started looking at Go and I am just writing a couple of small programs to get the hang of it.</p> <p>I just wanted to make sure that I am not compiling my Go apps in an inefficient or stupid way.</p> <p>Once I figure out which packages I want to import and work with I run the &#34;go install&am...阅读全文

资源 2016-04-03 21:51:54 xuanbao