十一. Go并发编程--singleflight
一.前言
1.1 为什么需要Singleflight?
很多程序员可能还是第一次听说,本人第一次听说这个的时候以为翻译过来就是程序设计中被称为的是 "单例模式"。 google之后二者天壤之别。
一般情况下我们在写一写对外的服务的时候都会有一层 cache 作为缓存,用来减少底层数据库的压力,但是在遇到例如 redis 抖动或者其他情况可能 ...
【Go学习】一文彻底搞懂go mod使用
jquery中文网为您提供一文彻底搞懂go mod使用等资源,欢迎您收藏本站,我们将为您提供最新的一文彻底搞懂go mod使用资源
目录
一、如何使用go mod
二、golang开启mod后import报红解决
三、go mod 怎么导入本地其它项目的包?
四、完整代码
一、如何使用go mod
下面的函数中使用了iris,所以我们需要先使用go mod下 ...
go程序不停机重启
让我们给http服务写一个版本更新接口,让它自动更新版本并重启服务吧。
初步例子
注:为了精简,文中代码都去除了err处理
main.go
var Version = "1.0"
/* 打印版本 */
func version(w http.ResponseWriter, r *http.Request) {
msg := fmt.Sprintf("version %v\n", Version)
w.Write([]byte(msg))
}
/* ...
uber-go guide,uber的go编码规范
uber-go guide,uber的go语言编码规范
感谢翻译者和原作们
本文转自:https://github.com/xxjwxc/uber_go_guide_cn
(特此感谢作者的翻译,感谢他们的辛苦付出)
原英文:https://github.com/uber-go/guide,uber-go/guide 的中文翻译
原英文:uber-go style
(也感谢uber-go的原作者们)
uber-go/guide 的中文翻译
English ...
性能优化 | Go Ballast 让内存控制更加丝滑
关于 Go GC 优化的手段你知道的有哪些?比较常见的是通过调整 GC 的步调,以调整 GC 的触发频率。
设置 GOGC
设置 debug.SetGCPercent()
这两种方式的原理和效果都是一样的,GOGC 默认值是 100,也就是下次 GC 触发的 heap 的大小是这次 GC 之后的 heap 的一倍。
我们都知道 GO 的 GC 是标记-清除方式,当 GC 会触发时全 ...
九. Go并发编程--context.Context
一. 序言
1.1 场景一
现在有一个 Server 服务在执行,当请求来的时候我们启动一个 goroutine 去处理,然后在这个 goroutine 当中有对下游服务的 rpc 调用,也会去请求数据库获取一些数据,这时候如果下游依赖的服务比较慢,但是又没挂,只是很慢,可能一次调用要 1min 才能返回结果,这个时候我们该如何处理?
如下图所示 ...
go发送邮件
1.项目中需要把脚本附件发送给同事邮箱,找了好久
1、安装 gomail 包:
go get -v gopkg.in/gomail.v2
2、完整代码:
package main
import (
"fmt"
"gopkg.in/gomail.v2"
"mime"
)
/*
go邮件发送
*/
func SendMail(mailTo []string, subject string, body string) error {
// 设置邮箱主体
mail ...
八. Go并发编程--errGroup
一. 前言
了解 sync.WaitGroup的用法都知道
一个 goroutine 需要等待多个 goroutine 完成和多个 goroutine 等待一个 goroutine 干活时都可以解决问题
WaitGroup 的确是一个很强大的工具,但是使用它相对来说还是有一点小麻烦,
一方面我们需要自己手动调用 Add() 和 Done() 方法,一旦这两个方法有一个多调用或者少调 ...
Go 日常开发常备第三方库和工具
不知不觉写 Go 已经快一年了,上线了大大小小好几个项目;心态也经历了几轮变化。
因为我个人大概前五年时间写的是 Java ,中途写过一年多的 Python,所以刚接触到 Go 时的感觉如下图:
既没有 Java 的生态,也没有 Python 这么多语法糖。
写到现在的感觉就是:
这里就不讨论这几门语言谁强谁弱了;重点和大家分享下我 ...
Go第三方库-重试(retry-go)
重试机制的简单库。
概要
http请求重试示例:
url := "http://example.com"
var body []byte
err := retry.Do(
func() error {
resp, err := http.Get(url)
if err != nil {
return err
}
defer resp.Body.Close()
body, err = ioutil.ReadAll(resp.Body)
if err != nil {
return err
}
return ni ...
解决go gin框架 bindingrequired`无法接收零值的问题
解决go gin框架 binding:"required"`无法接收零值的问题
1、现象:
在go中gin框架中,需要接收前端参数时,参数必填,我们一般添加binding:"required"`标签,这样前端参数不给时,gin框架会自动校验,给出error。
gin的参数校验是基于validator的,如果给了required标签,则不能传入零值,比如字符串的不能传入空串, ...
Vscode配置Go开发调试环境
Vscode配置Go开发调试环境
Go安装
Go官网下载Go,然后按照流程安装,记录下安装的路径,后面需要更改环境变量配置GOROOT,例如我这里安装的路径是:
Windows
D:\Develop\Go
Linux(基于ArchLinux):
/usr/lib/go
安装完成后使用命令查看是否安装完成,显示安装go版本号:
go version
安装完成之后建立一个Go项目的存储 ...
Go WebSocket 实现
WebSocket是HTML5下的产物,能更好的节省服务器资源和带宽。常见场景:html5多人游戏、聊天室、协同编辑、基于实时位置的应用、股票实时报价、弹幕、视频会议、QQ,微信、等等... ...
websocket VS http
相似:
都是应用层协议,都基于tcp传输协议
跟http有良好的兼容性,ws和http的默认端口都是80,wss和https的默认端口都 ...
Go:我有注解,Java:不,你没有!
https://mp.weixin.qq.com/s/hrsagmDtjt6r9fJKf8SUcQ
特殊在于,Go 有些特性是其他语言有,他没有的。最经典的就是 N 位 Java 同学寻找 Go 语言的注解在哪里,总要解释。
为此,今天煎鱼就带大家了解一下 Go 语言的注解的使用和情况。
什么是注解
了解历史
注解(Annotation)最早出现自何处,翻了一圈并没有找到。但可以明 ...
Go语言核心36讲(Go语言基础知识二)--学习笔记
02 | 命令源码文件
我们已经知道,环境变量 GOPATH 指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件。
这里的源码文件又分为三种,即:命令源码文件、库源码文件和测试源码文件,它们都有着不同的用途和编写规则。
对于 Go 语言学习者来说,你在学习阶段中,也一定会经常编写可以直接运行 ...
Go基础
Go基础
第一篇 Go介绍与开发环境搭建
[01] Go语言介绍
[02] Go安装
[03] Go语言集成开发环境之GoLand安装使用
[04] Go语言集成开发环境之VS Code安装使用
[05] Go 语言多版本安装及管理利器 - GVM
第二篇 Go包管理
[01] Go项目结构
[02] Go包管理
[03] Go语言之依赖管理
[04] 使用go module导入本地 ...
Go语言核心36讲(导读)--学习笔记
目录
开篇词 | 跟着学,你也能成为Go语言高手
导读 | 写给0基础入门的Go语言学习者
导读 | 学习专栏的正确姿势
开篇词 | 跟着学,你也能成为Go语言高手
Go 语言是由 Google 出品的一门通用型计算机编程语言。
Go 程序可以在装有 Windows、Linux、FreeBSD 等操作系统的服务器上运行,并用于提供基础软件支撑、API 服务、We ...
Go语言之Goroutine与信道、异常处理
一、Goroutine
Go 协程可以看做成一个轻量级的线程,Go 协程相比于线程的优势:
Goroutine 的成本更低大小只有 2 kb 左右,线程有几个兆。
Goroutine 会复用线程,比如说:我有 100 个协程,但是都是共用的的 3 个线程。
Goroutine 之间通信是通过 channel 通信的。(Go 推崇的是信道通信,而不推崇用共享变量通信)
1、启 ...
centOS 下安装go环境
两种方法,yum 安装和 tar.gz包安装。
yum 安装
yum install golang
不方便管理
tar.gz 包安装
1.下载安装包
wget https://golang.org/dl/go1.17.1.linux-amd64.tar.gz
# 上面可能需要FQ,使用下面备用的
wget https://golang.google.cn/dl/go1.17.1.linux-amd64.tar.gz
2.将下载的包解压到 /usr/local目录下
tar -zxf go ...
【Go】Golang实现gRPC的Proxy的原理
背景
gRPC是Google开始的一个RPC服务框架, 是英文全名为Google Remote Procedure Call的简称。
广泛的应用在有RPC场景的业务系统中,一些架构中将gRPC请求都经过一个gRPC服务代理节点或网关,进行服务的权限限制,限流,服务调用监控,增加请求统计等等诸多功能。
如下以Golang和gRPC为例,简要分析gRPC的转发原理。
  ...