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的转发原理。
  ...
腾讯standards-go
Golang 代码规范
目录Golang 代码规范1. 前言2. 代码风格2.1 【必须】格式化2.2 【推荐】换行2.3 【必须】括号和空格2.4 【必须】import 规范2.5 【必须】错误处理2.5.1 【必须】error 处理2.5.2 【必须】panic 处理2.5.3 【必须】recover 处理2.6 【必须】单元测试2.7 【必须】类型断言失败处理3. 注释3.1 【必须】包注释3 ...
go开发遇到的问题
1. go mod tidy : dial tcp xx:443: i/o timeout,
因为go 1.17 默认的GOPROXY=https://proxy.golang.org,direct ,在墙内无法访问。
所以在.zshrc /.bashrc 加上环境变量
export GOPROXY=https://goproxy.io
export GO111MODULE=on
2. go1.17. GoLand 2021.2.3. 因为有些旧的依赖包,不希望启用go module. ...
go语言游戏服务端开发(一)——架构
五邑隐侠,本名关健昌,12年游戏生涯。 本教程以Go语言为例。
网络游戏程序分为客户端和服务端。客户端负责图形渲染、交互和一些简单校验处理,服务端负责业务逻辑处理、数据存储。
我们开发一个游戏demo,服务端程序可以是一个单线程的服务进程。它包含网络通信、业务逻辑处理、数据存储。服务端打开网络端口监听, ...