使用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#功能异 ...
[翻译]Go与C#的比较,第二篇:垃圾回收
Go vs C#, part 2: Garbage Collection | by Alex Yakunin | ServiceTitan — Titan Tech | Medium
目录译者注什么是垃圾回收?什么是GCBurn?峰值分配吞吐量("速度测试")GCBurn 测试GC Burn测试结果结论.NET CoreGo两者的相同点免责声明和后记
译者注
本文90%通过机器翻译,另外10%译者按照自己的理解进行翻译,和原 ...
徒手用 Go 写个 Redis 服务器(Godis)
作者:HDT3213
今天给大家带来的开源项目是 Godis:一个用 Go 语言实现的 Redis 服务器。支持:
5 种数据结构(string、list、hash、set、sortedset)
自动过期(TTL)
发布订阅、地理位置、持久化等功能
你或许不需要自己实现 Redis 服务,但你是否厌烦了每天都是写增删改查的业务代码,想提高编程水平试图从零写个项 ...
Go timer 是如何被调度的?
hi,大家好,我是 haohongfan。
本篇文章剖析下 Go 定时器的相关内容。定时器不管是业务开发,还是基础架构开发,都是绕不过去的存在,由此可见定时器的重要程度。
我们不管用 NewTimer, timer.After,还是 timer.AfterFun 来初始化一个 timer, 这个 timer 最终都会加入到一个全局 timer 堆中,由 Go runtime 统一管理。
全 ...