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

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

51CTO博客 2021-04-27 16:31:15 wx6087c7391d3cd

Go gRPC 调试工具

概述最近这段时间工作挺忙的,发现已经 3 周没更文了...感谢你们还在,今天给大家分享一款 gRPC 的调试工具。进入正题。当我们在写 HTTP 接口的时候,使用的是 Postman 进行接口调试,那么在写 gRPC 接口的时候,有没有类似于 Postman 的调试工具呢?当然是有的 ~ 咱们一起看下 grpcui,源码地址:https://github.com/fullstorydev/grpcui看下官方描述:grpcui is a command-line tool that lets y...阅读全文

51CTO博客 2021-04-27 16:30:52 wx6087c7391d3cd

[系列] Go - chan 通道

概述原来分享的基础语法的时候,还未分享过 chan 通道,这次把它补上。chan 可以理解为队列,遵循先进先出的规则。在说 chan 之前,咱们先说一下 go 关键字。在 go 关键字后面加一个函数,就可以创建一个线程,函数可以为已经写好的函数,也可以是匿名函数。举个例子: func main() { fmt.Println("main start") go func() { fmt.Println("goroutine") }() fmt.Println("main end")}输出: mai...阅读全文

51CTO博客 2021-04-27 16:30:31 wx6087c7391d3cd

Go - 环境安装

你好,Go语言Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。因工作需要,准备入坑,先从环境安装开始,输出一个 Hello World。环境安装目标安装完成并运行 Hello World 成功!本机系统:macOS High Sierra 10.13.4Go 版本:1.12方式一:通过 brew 安装brew install go根据提示进行安装吧,我使用的 方式二 进行安装的。方式二:通过安装包安装地址:https://dl.google.com/go/go1.12.da...阅读全文

51CTO博客 2021-04-27 16:30:07 wx6087c7391d3cd

[系列] Go gRPC Hello World

概述开始 gRPC 了,这篇文章学习使用 gRPC,输出一个 Hello World。用 Go 实现 gRPC 的服务端。用 Go 实现 gRPC 的客户端。gRPC 支持 4 类服务方法,咱们这次实现 单项 RPC 和 服务端流式 RPC。四类服务方法单项 RPC服务端发送一个请求给服务端,从服务端获取一个应答,就像一次普通的函数调用。rpc SayHello(HelloRequest) returns (HelloResponse){}服务端流式 RPC客户端发送一个请求给服务端,可获取一个...阅读全文

51CTO博客 2021-04-27 16:29:43 wx6087c7391d3cd

Go - 切片

概述切片是一种动态数组,比数组操作灵活,长度不是固定的,可以进行追加和删除。len() 和 cap() 返回结果可相同和不同。声明切片//demo_7.go package main import ( "fmt" ) func main() { var sli_1 [] int //nil 切片 fmt.Printf("len=%d cap=%d slice=%v\n",len(sli_1),cap(sli_1),sli_1) var sli_2 = [] int {} //空切片 fmt.Pr...阅读全文

51CTO博客 2021-04-27 16:13:51 wx6087c7391d3cd

Go - 使用 defer 函数 要注意的几个点

概述defer 函数大家肯定都用过,它在声明时不会立刻去执行,而是在函数 return 后去执行。它的主要应用场景包括 异常处理、记录日志、清理数据、释放资源 等等。这篇文章不是分享 defer 的应用场景,而是分享使用 defer 需要注意的那些点。咱们先从一道题开始,一起来感受下 ...func calc(index string, a, b int) int { ret := a + b fmt.Println(index, a, b, ret) return ret } func mai...阅读全文

51CTO博客 2021-04-27 16:13:32 wx6087c7391d3cd

10天入门go语言教程- 字符串

转载请注明来源"老男孩IT教育"来源网址:https://www.sholdboyedu.com/new/536.htmlGo语言的字符串中的常见操作有很多,如果不了解字符串在后期开发的时候就会遇到很多的问题,下面我们一起来了解什么是字符串以及常见的字符串有哪些?字符串什么是字符串?Go 语言中的字符串是一个字节切片。把内容放在双引号""之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串的简单示例。package mainimport ( "fmt")func main() { nam...阅读全文

51CTO博客 2021-04-27 15:25:01 上海老男孩教育

手把手带你进行Golang环境配置

前言大家好,我是星期八,是一个每天都要在镜子前给自己梳仅剩三根头发的三年码农本次我们来安排一下如何在win平台上配置Go语言开发环境。整体来说,Go配置环境还是挺轻松的,和Python差不多,并且会自动添加环境变量。下载地址Go官方镜像站点:https://golang.google.cn/dl/选择默认的最高版本就好,Go代码向下兼容,版本之间的差异并无所谓安装1、找到下载好的安装文件。2、双击进行安装3、选择同意4、自定义安装位置。5、点击install进行安装。6、安装进行中,等到安装完成...阅读全文

51CTO博客 2021-04-27 13:58:49 mb6066e504cce6f

手把手教你实现Golang跨平台编译

前言大家好,我是星期八,是一个每天都要在镜子前给自己梳仅剩三根头发的三年码农。上面的文章,我们已经搭建了Go语言环境,可以戳这里:手把手带你进行Golang环境配置,还实现了第一个Go程序,本次我们来安排一下如何实现跨平台编译。跨平台编译跨平台编译,也叫交叉编译,我可以在win平台上,编译成linux平台可执行的文件。这也是Go备受青睐的原因,像java,python,php等语言,我们开发一般是在win平台上开发,部署的时候在linux上部署,在处理第三方依赖是比较麻烦,不仅开发累,运维也累,...阅读全文

51CTO博客 2021-04-27 13:42:21 mb6066e504cce6f

手把手带你进行Golang环境配置

前言大家好,我是星期八,是一个每天都要在镜子前给自己梳仅剩三根头发的三年码农本次我们来安排一下如何在win平台上配置Go语言开发环境。整体来说,Go配置环境还是挺轻松的,和Python差不多,并且会自动添加环境变量。下载地址Go官方镜像站点:https://golang.google.cn/dl/选择默认的最高版本就好,Go代码向下兼容,版本之间的差异并无所谓安装1、找到下载好的安装文件。2、双击进行安装3、选择同意4、自定义安装位置。5、点击install进行安装。6、安装进行中,等到安装完成...阅读全文

51CTO博客 2021-04-27 13:41:20 mb6066e504cce6f

Golang如何使用消息队列rabbitmq

AMQP协议AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个进程间传递异步消息的网络协议。RabbitMQ 就是 amqp 协议的Erlang的实现。AMQP的模型架构的主要角色,生产者、消费者、交换器、队列。生产者、消费者、服务节点生产者(Producter) 消息投递方消费者(Consumer) 消息接收方服务节点(Broker) 消息的服务节点,基本上可以简单的把一个broker看成一台消息服务器交换器、队列、绑定绑定Rabbitmq中...阅读全文

51CTO博客 2021-04-27 13:38:02 mb6066e504cce6f

如果你是一个Golang面试官,你会问哪些问题?

这篇文章翻译自一位外国友人的关于面试后端程序员的文章,我比较喜爱这篇文章。一是因为它极大的拓宽了我的视角,另一方面是其中的一些问题非常具有启发性。不仅对于面试者,对于面试官来说也是个不错的参考。于是迫不及待的翻译了一下,给各位看官做个参考。原文参见 @arialdomartini的: Back-End Developer Interview Questions以下是原文翻译。通用问题开放式问题设计模式相关问题代码设计相关问题语言相关问题Web相关问题数据库相关问题非关系型数据库相关问题代码版本管...阅读全文

51CTO博客 2021-04-27 13:37:34 mb6066e504cce6f

从php到Golang系统的演变

前言 工作这些年,先后经历过两家公司,有参与过php语言框架的开发和主导过go语言技术栈的落地工作,在此过程中有一些感悟和总结。我想以之前我主导的go语言技术栈为线索,来陈述当时遇到的一些问题,以及分析问题和解决问题的思路。主要目的是想陈述go技术体系在团队中落地的过程,分析我们在各个阶段中,遇到的一些问题,并將分析问题的思路和解决问题的方法记录下来,以便让后来的同学了解go语言在团队的演进过程,吸取相关的经验,以便在今后的系统设计和开发上少走弯路。 在系统不断演进的过程中,有时候对框架的选型很...阅读全文

51CTO博客 2021-04-27 13:34:36 mb6066e504cce6f

【Golang开源项目推荐】稳定,弹性,高效web和rpc框架 go-zero

0. go-zero 介绍go-zero 是一个集成了各种工程实践的web 和rpc 框架。通过弹性设计保障了大并发服务端的稳定性,经受了充分的实战检验。go-zero 包含极简的API 定义和生成工具goctl,可以根据定义的api 文件一键生成Go, iOS, Android, Kotlin, Dart, TypeScript, JavaScript 代码,并可直接运行。使用go-zero 的好处:轻松获得支撑千万日活服务的稳定性内建级联超时控制、限流、自适应熔断、自适应降载等微服务治理能力...阅读全文

51CTO博客 2021-04-27 13:30:22 mb6066e504cce6f

捋一捋Go语言的一个类型转换工具包strconv包

前言Hey,大家好,我是码农,星期八,这次咱们来学一下Go语言的一个类型转换工具包strconv。不知道你有没有想过。在Go中,字符串100如何转成数字100。这样?func main() { var score = "100" i := int(score) fmt.Printf(i)}No,No,No,看一下执行结果。报错啦,说明并不是这么简单粗暴转换的!!!string转int(用Atoi)代码func main() { //string 100 var scoreStr = "100" ...阅读全文

51CTO博客 2021-04-27 14:14:41 mb6066e504cce6f

一文搞懂 Go 超时控制

为什么需要超时控制? 请求时间过长,用户侧可能已经离开本页面了,服务端还在消耗资源处理,得到的结果没有意义 过长时间的服务端处理会占用过多资源,导致并发能力下降,甚至出现不可用事故 Go 超时控制必要性 Go 正常都是用来写后端服务的,一般一个请求是由多个串行或并行的子任务来完成的,每个子任务可能是另外的内部请求,那么当这个请求超时的时候,我们就需要快速返回,释放占用的资源,比如goroutine,文件描述符等。 服务端常见的超时控制 进程内的逻辑处理 读写客户端请求,比如HTTP或者RPC请求...阅读全文

51CTO博客 2021-04-27 14:13:30 Kevin Wan

一篇文章带你搞定Go语言中flag包使用

前言Hey,大家好,我是码农,星期八,这次来讲一下的Go语言中,比较常用的一个包flag包。这个包的用途是接收命令行参数的。如果你玩过Mysql,肯定对这个界面很熟悉对的,就是干这个用的,接收命令行参数。注意这一章所学的任何代码,都要编译成.exe才能跑,禁止右击 run!!os.Args其实Go的os模块,也带有这个功能,但是这个功能有点欠缺。不能接收像-u root -p 3306这样指定key的值,只能接收像root 3306这样的方式。简单了解一下吧。代码func main() { cm...阅读全文

51CTO博客 2021-04-27 14:12:56 mb6066e504cce6f

一篇文章带你搞定Go语言基础之文件操作

前言Hey,大家好呀,我是Go进阶者,这次咱们来说一下文件操作。文件操作就简单了,像打开word了,excel了,都是文件操作,当然,我们肯定是不能直接操作word的我们就从最简单的普通文件开始叭!打开和关闭文件package mainimport "os"func main() { //os.Open是只读模式 fileObj, err := os.Open("永不退缩.txt") if err != nil { panic(err)} //关闭文件 fileObj.Close() //一般情...阅读全文

51CTO博客 2021-04-27 14:12:07 mb6066e504cce6f