Go并发编程--正确使用goroutine
目录1. 对创建的gorouting负责1.1 不要创建一个你不知道何时退出的 goroutine1.2 不要帮别人做选择1.3 不要作为一个旁观者1.4 不要创建不知道什么时候退出的 goroutine1.5 不要创建都无法退出的 goroutine1.6 确保创建出的goroutine工作已经完成2. 总结3. 参考
1. 对创建的gorouting负责
1.1 不要创建一个你不知道何时退出 ...
Go优秀开源项目推荐
前言
本文主要是收集Go语言开发的一些优秀项目和框架,个人见识有限肯定还有很多优秀的Go项目没有收录的,假如大家有好的Go项目可以在文末留言(排名不分先后)。
Go优秀项目收集仓库
GolangFamilygithub.com/GolangFamily
awesome-go
精选的 Go 框架、库和软件的精选列表。
https://github.com/avelino/awesome- ...
Windows Go 开发环境下载、安装并配置
前言
对于我们Windows用户而言,Go提供两种环境安装方式(源码安装除外):
1、MSI安装(MSI文件是Windows Installer的数据包,它实际上是一个数据库,包含安装一种产品所需要的信息和在很多安装情形下安装(和卸载)程序所需的指令和数据。):程序在安装过程中会自动配置Go所需要的环境变量。
2、ZIP安装:需要你 ...
使用Go实现并发切片上传和下载文件
1.实现目的
主要目的是用来熟悉go语言,通过该项目可以熟悉到的go知识点:
(1)go语言语法;
(2)go的goroutine使用方式;
(3)go通道chan的使用
(4)等待所有goroutine结束的同步信号使用;
(5)go的结构体定义和方法使用;
2.实现的功能点
(1)支持批量上传下载文件,并进行md5值校验;(2)支持查看文件列 ...
go-zero:微服务框架
go-zero 是一个集成了各种工程实践的 Web 和 rpc 框架,它的弹性设计保障了大并发服务端的稳定性,并且已经经过了充分的实战检验。
go-zero 在设计时遵循了 “工具大于约定和文档” 的理念,所以 go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 API 文件一键生成 Go、iOS、Android、Kotlin、Dart、TypeScrip ...
Go语言参数校验(go-playground / validator)——基本使用
Go语言没有像Java一样的注解快速进行参数的校验,但可以通过struct tag(结构体标签)进行序列化。常用的如:
type User struct { ID string `json:"id"` Name string `json:"name"` Age string `json:"age"`} 但需要更复杂的校验,这时需要用一些专业的库来完成。go-playground / validator作为一款优秀的Go语言校验库,基 ...
go故障排查集锦
问题1:创建main.go时,提示“GOROOT is not defined”?
排查思路:
1)查询GOROOT变量,并验证是否正确;
go env |findstr GOROOT
2)查询GOPATH变量,并验证是否正确;
go env |findstr GOPATH
3)进入终端,直接测试是否能编译运行程序
初步结论:golang的配置问题。
The selected dire ...
Go Gin框架学习
什么是Gin?
Gin 是一个用 Go (Golang) 编写的 HTTP web 框架。 它是一个类似于 martini 但拥有更好性能的 API 框架, 多亏了 httprouter,速度提高了近 40 倍。具有良好的性能和生产力。
而且封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
对于golang而言,web框架的依赖要远比Pytho ...
Go语言常见的坑
这里列举的Go语言常见坑都是符合Go语言语法的,可以正常的编译,但是可能是运行结果错误,或者是有资源泄漏的风险。
1. 可变参数是空接口类型
当参数的可变参数是空接口类型时,传入空接口的切片时需要注意参数展开的问题。
package main
import "fmt"
func main() {
var a = []interface{}{1, 2, 3}
fmt.Printl ...
GO语言安装以及国内镜像
首先,下载GO语言,国内的话用
Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)
可能会快一点
然后根据自己的系统选择下载的包,我是win10,就选go1.16.6.windows-amd64.msi这个,点击等待下载
下载完以后双击打开
安装很简单,一直下一步就行
怎么看自己安装好了没
控制台/cmd打开,然后输入go,只要出现下面 ...
Go版本管理--go.sum
目录1. 简介2. go.sum文件记录3. 生成4.校验5.校验和数据库
1. 简介
为了确保一致性构建,Go引入了go.mod文件来标记每个依赖包的版本,在构建过程中go命令会下载go.mod中的依赖包,下载的依赖包会缓存在本地,以便下次构建。
考虑到下载的依赖包有可能是被黑客恶意篡改的,以及缓存在本地的依赖包也有被篡改的可能,单单一 ...
Go是一门什么样的语言?
Go语言基本介绍
首先Go语言诞生于2007年由谷歌公司研发,2009年开源,2012年推出1.0版本,Go是一种语言层面支持并发(Go最大的特色、天生支持并发)、内置runtime,支持垃圾回收(GC)、静态强类型,快速编译的语言(编译型语言)。
知识拓展:
静态强类型语言是什么?
静态强类型语言=静态类型语言+强类型语言
...
基于Gin+Gorm框架搭建MVC模式的Go语言企业级后端系统
文/朱季谦
环境准备:安装Gin与Gorm
本文搭建准备环境:Gin+Gorm+MySql。
Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学。作为一名后端Java开发,在最初入门时,最熟悉的莫过于MVC分层结构,可以简单归纳成controller层,model层,dao层,而在SpringBoot框架里,大概也经 ...
go定时器--Ticker
目录1. 简介2. 使用场景2.1 简单定时任务2.2 定时聚合任务3. Ticker对外接口3.1 创建定时器3.2 停止定时器3.3 简单接口3.4 错误示例4.实现原理4.1 数据结构4.2实现原理4.2.1 创建Ticker4.2.2 停止Ticker总结参考
1. 简介
Ticker是周期性定时器,即周期性的触发一个事件,通过Ticker本身提供的管道将事件传递出去。
Ticker的 ...
Go定时器--Timer
目录前言Timer 定时器简介使用场景1. 设定超时时间2. 延迟执行某个方法Timer对外接口1. 创建定时器2. 停止定时器3. 重置定时器其他接口1. After()2. AferFunc()总结Timer实现原理前言数据结构1. Timer2.runtimeTimer实现原理1. 创建Timer2. 停止Timer3. 重置Timer总结参考
前言
Go提供了两种定时器, 即 一次性定时器, 周 ...
Go进阶--httptest
目录基本使用扩展使用接口context使用模拟调用测试覆盖率参考
单元测试的原则,就是你所测试的函数方法,不要受到所依赖环境的影响,比如网络访问等,因为有时候我们运行单元测试的时候,并没有联网,那么总不能让单元测试因为这个失败吧?所以这时候模拟网络访问就有必要了。
对于go的web应用程序中往往需要与其他系统进行 ...
go测试--进阶
目录前言控制编译的参数-args-json-o控制测试的参数-bench regexp-benchtime s-cpu 1,2,4-count n-failfast-list regexp-parallel n-run regexp-timeout d-v-benchmem
前言
go test有非常丰富的参数,一些参数用于控制测试的编译,另一些参数控制测试的执行。
有关测试覆盖率、vet和pprof相关的参数先略过,我们在讨论相关 ...
IDEA连接数据库出现的时区问题:Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually解决办法
1、问题描述
mysql默认时区与当前的时区冲突。
Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.
2、解决方案一:通过命令窗口实现(仅单次有效)
2.1 检查MySQL时区
(1)进入命令行窗口(Win+R),连接数据库:mysql -hlocalhost -uroot -p,回车后输入 ...
跟我一起学Go系列:Go gRPC 安全认证机制-SSL/TLS认证
Go gRPC 系列:
跟我一起学Go系列:gRPC 拦截器使用
跟我一起学Go系列:gRPC 入门必备
第一篇入门说过 gRPC 底层是基于 HTTP/2 协议的,HTTP 本身不带任何加密传输功能,基于 SSL 的 HTTPS 协议才是加密传输。gRPC 使用了 HTTP/2 协议但是并未使用 HTTPS,即少了加密传输的部分。
对于加密传输的部分 gRPC 将它抽出来作为一 ...
[翻译]Go与C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切
Go vs C#, Part 3: Compiler, Runtime, Type System, Modules, and Everything Else | by Alex Yakunin | ServiceTitan — Titan Tech | Medium
目录译者注相似性编译垃圾回收模块类、结构、接口错误处理相等性(==, !=)基础类库两种语言中存在的其他类似特征类似的反模式/设计错误C#中缺少的Go功能Go中缺少的C#功能异 ...