Gin 框架绑定 JSON 参数使用 jsoniter

Gin 框架中,处理 JSON 格式的参数绑定时,默认采用的标准包 encoding/json,然而标准包不能满足我们的一些要求,比如兼容字符串整型、PHP空数组、时间格式等。最简单的方式开发 API 时,需要用到 ShouldBindJSON 绑定传入的参数到结构体:// github.com/gin-gonic/gin@v1.6.3/context.go:643 // ShouldBindJSON is a shortcut for c.ShouldBindWith(obj, binding...阅读全文

Segmentfault 2020-08-12 16:32:49 Jioby

golang的逃逸分析

翻译自:http://www.agardner.me/golang/garbage/collection/gc/escape/analysis/2015/10/18/go-escape-analysis.htmlGolang逃逸分析2015-10-18垃圾回收是Go的一个很便利的特性--其自动的内存管理使代码更整洁,同时减少内存泄漏的可能性。但是,由于垃圾回收需要周期性的停止程序从而去收集不用的对象,不可避免的会增加额外开销。Go编译器是智能的,它会自动决定一个变量是应该分配在堆上从而在将来便于...阅读全文

Segmentfault 2020-08-12 16:32:49 laughbug

Go语言之结构体,接口和文件操作

一 结构体 1 简介 1 结构体介绍 Go 语言通过自定义方式形成新的类型,结构体是类型中带有成员的符合类型,Go语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 2 字段 结构体成员是由一系列成员变量构成,这些成员变量称为"字段" 字段特征如下:1 字段必须有自己的名称和类型2 字段名必须唯一3 字段的类型一般是基本数据类型,数组,也可以是引用类型,甚至可以是字段所在的结构体的类型。 Go 语言中不但结构体可以拥有自己的方法,且每种自定义类型都可以拥有自己的方法 2 定义结...阅读全文

51CTO博客 2020-08-11 23:12:47 长跑者1号

用户UID的几种生成方案

本文目的是介绍市面上流行的UID生成方式、优劣情况,帮助读者根据自己的产品类型和用户规模选择合适的生成方案。什么是UID?UID是一个系统内用户的唯一标识,UID的特性: 唯一性、可公开广播、存在可能价值等。唯一性通过UID可以快速映射到一个具体的唯一用户上,类似于hash、短网址映射。可公开广播UID可以和用户的账号形成对应关系。对于某些以手机号、邮箱这些隐私内容为登录账号的系统,如果想增加转账这种业务,输入对方的UID,可以做到隐私保护。存在可能价值类似QQ靓号、B站短ID、微博ID这种可以...阅读全文

Segmentfault 2020-08-12 16:32:49 boywus

写Go项目有两件很烦的事情?本文讨论其中之一

写 Golang 项目有两件很烦的事情:一件是错误处理时连绵不绝的「if err != nil」,另一件是作为编译型语言,代码修改后不能实时看到效果, 借助一些工具可以实现文件修改后自动编译重启,比如: Linux 环境:inotify-tools[1](Golang Automatic Reloads[2]) Mac 环境:fswatch[3] 不过常见的工具要么不跨平台,要么操作复杂,好在我发现了一个 facebook 出品的神器:watchman[4],不仅跨平台,而且操作简单,你只要写个...阅读全文

51CTO博客 2020-08-10 20:00:23 小几斤

(毕设项目)Vue+Go前端后端一体化 企业级微服务网关项目

### (毕设项目)Vue+Go前端后端一体化 企业级微服务网关项目 下载地址:[百度云盘](http://www.51xuebc.com/thread-129-1-1.html) 不管是基于Java、Python、PHP,还是基于Go的网站,网站流量越高,对网关性能要求越高,尤其是亿级流量网站中,网关更是核心,它作为接入层承载了流量转发、负载均衡、服务限流、熔断降级等功能。作为后端开发者,掌握网关技术,是后端架构能力的分水岭,懂得设计网关才能知道架构精妙所在,本课程带你手把手设计并...阅读全文

Go语言中文网 2020-08-11 23:05:44 xihongshi

Go make 和 new 的区别

# 前言 在 go 中对某种类型进行初始化时会用到 `make` 和 `new`, 因为它们的功能相似,所以初学者可能对它们的感到困惑;本文将由浅入深的介绍其功能和区别 # 结论 长话短说,先放上结论: | 方法 | 作用 | 作用对象 | 返回值 | | ---- | -------- | --------------------------------...阅读全文

Go语言中文网 2020-08-11 22:13:30 quzhen

转发 go服务灰度发布实战

原文https://juejin.im/post/6844903693423230989引言随着微服务的快速发展,越来越多的公司选择使用“金丝雀发布”的模式进行软件的发布。在本文中我将通过华为的开源微服务框架:go-chassis,向各位介绍如何通过对router的管理从而达到金丝雀发布的目的。               ​                                                            图一Go-chassis实现金丝雀发布金丝雀发布:又...阅读全文

Go语言中文网 2020-08-11 20:12:26 tianxiaoliang

Go之断言类型(assert type)

1.背景介绍: 笔者最近在使用一个数据结构实现多个接口,但是却发现想要在一段时间内转换成接口1,另外一段时间转换成接口2,所以也就使用到了断言类型。在看过断言类型之后,觉得还是很有必要讲一讲这个断言类型,于是便有了这篇文章。2. 断言类型介绍:接口类型提供一种,将接口类型转换成具体类型的转换方法,也就是断言类型(assert type)。使用方法如下所示:1)语法一t := i.(T)解释说明:T:表示的是具体的数据类型,i:表示的是接口变量i,t:表示的是转换之后的变量。功能介绍:这个语句实现...阅读全文

Go语言中文网 2020-08-11 19:51:18 ZhDavis

Go语言==真的那么简单吗

1.背景介绍:笔者最近发现对于Go的struct在使用==的时候,有时候可以使用,有时候却不能使用,甚至编译出错。基于这个既定事实,笔者做了一次实现,便整理了这篇文章出来。struct使用==的例子如下所示:场景1:==可以使用package main import ( "fmt") type node struct { Name string Age int} func main() { n1 := node{Name: "hello", Age: 10} n2 := nod...阅读全文

Go语言中文网 2020-08-11 19:48:31 ZhDavis

Go之sort

一、sort介绍:    Go的pkg提供了一个排序的包sort,用于对slices和用户自定义的类型进行排序操作。原文参考:Package sort provides primitives for sorting slices and user-defined collections.https://golang.org/pkg/sort    该包实现了四种基本排序算法:插入排序、归并排序、堆排序和快速排序,但是这四种排序方法是不公开的,它们只被用于 sort 包内部使用。    我们在对数...阅读全文

Go语言中文网 2020-08-11 19:45:38 ZhDavis

go之sync.Map

背景介绍:在golang中map不是并发安全的,所有才有了sync.Map的实现,尽管sync.Map的引入确实从性能上面解决了map的并发安全问题,不过sync.Map却没有实现len()函数,这导致了在使用sync.Map的时候,一旦需要计算长度,就比较麻烦,一定要在Range函数中去计算长度(备注:这个后面会有例子给出)。基于上面的现状,笔者从下面几点开始整理了这些知识:普通map的介绍,包括线程不安全部分和常规使用方法。sync.Map的使用方式。sync.Map的底层实现介绍。一、ma...阅读全文

Go语言中文网 2020-08-11 19:38:48 ZhDavis

Go语言入门系列(六)之再探函数

Go语言入门系列前面的文章:Go语言入门系列(三)之数组和切片Go语言入门系列(四)之map的使用Go语言入门系列(五)之指针和结构体的使用在Go语言入门系列(二)之基础语法总结这篇文章中已经介绍过了Go语言的函数的基本使用,包括声明、参数、返回值。本文再详细介绍一下函数的其他使用。1. 变参Go语言的函数除了支持0个或多个参数,还支持不定数量的参数,即变参。声明方式为:func foo(变参名 ...参数类型) 函数类型 { //函数体 }下面是一个具体的函数,它接收不定数量的int参数,并返...阅读全文

Segmentfault 2020-08-12 16:32:48 行人观学

教你如何搭建自己的go-gin框架(六) 模板处理

## 引言 > 简单说下本章的重点 * 1、静态服务器支持(映射静态文件路由) * 2、模板渲染 * 3、[代码地址 https://github.com/18211167516/go-Ebb/tree/master/day6-template](https://github.com/18211167516/go-Ebb/tree/master/day6-template) ## 1、支持静态服务器 ```golang func (group *RouterGroup) ...阅读全文

Go语言中文网 2020-08-11 17:29:29 18211167516

教你如何搭建自己的go-gin框架(五 路由支持中间件)

## 引言 > 简单说下本章的重点 * 1、路由支持中间件 * 2、新增日志中间件 * 4、新增异常错误中间件 * 3、[代码地址 https://github.com/18211167516/go-Ebb/tree/master/day5-middleware](https://github.com/18211167516/go-Ebb/tree/master/day5-middleware) ## 1、重点 * 中间件的目的是为了让web框架灵活支持用户某些自定义行为...阅读全文

Go语言中文网 2020-08-11 15:29:20 18211167516

mkdoc | Go 工具编译编译到 wasm

起因前段时间写了个 API 文档生成工具mkdoc,因为并没有像 swag-go 一样依赖 go CLI 后来就在想能不能把他编译到 wasm 然后放到网页上,这样就能方便大家 0 部署就能对他有个了解。成果 👉 在线体验 👈 ( :如果你对mkdoc感兴趣,欢迎 fork&star一些问题工具里用到了文件系统,go 提供的 wasm_exec.js 中没有实现文件系统用到了 os.Getwd 系统调用,syscall/js 没有直接支持一些 go 和 js 之间的交互问题解决文件系统在 was...阅读全文

Segmentfault 2020-08-12 16:32:48 thewinds

使用Prometheus监控Golang服务-基于YoyoGo框架

## Prometheus **Prometheus**是一个非常棒的工具,结合**grafana**能够让我在不写代码,或者少写代码的情况下搭建一套有效的监控体系。这里介绍一下**Prometheus**监控**golang**程序的方式。 ## Golang 服务程序 **Golang**的Web程序,我使用了**YoyoGo**框架,[《 YoyoGo基于ASP.NET Core设计的Golang实现 》](https://www.cnblogs.com/maxzhang1985...阅读全文

Go语言中文网 2020-08-11 11:38:23 yoyofx

教你如何搭建自己的go-gin框架(四 路由分组)

## 引言 > 简单说下本章的重点 * 1、优化路由支持分组 * 2、编写单元测试、执行案例测试 * 3、[代码地址 https://github.com/18211167516/go-Ebb/tree/master/day4-routerGroup](https://github.com/18211167516/go-Ebb/tree/master/day4-routerGroup) ## 1、路由分组的概念 > 如果没有路由分组,我们需要针对每一个路由进行控制。但是真实...阅读全文

Go语言中文网 2020-08-10 15:49:48 18211167516