![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 66
y果子
愿你成为自己的太阳,无需借助谁的光
展开
-
golang中Context的使用场景
golang中Context的使用场景golang中Context的使用场景context在Go1.7之后就进入标准库中了。它主要的用处如果用一句话来说,是在于控制goroutine的生命周期。当一个计算任务被goroutine承接了之后,由于某种原因(超时,或者强制退出)我们希望中止这个goroutine的计算任务,那么就用得到这个Context了。关于Context的四种结构,CancelContext,TimeoutContext,DeadLineContext,ValueContext的使用在转载 2021-12-24 17:32:13 · 2817 阅读 · 0 评论 -
深度解密Go语言之关于 interface 的 10 个问题
深度解密Go语言之关于 interface 的 10 个问题转载 2021-12-23 12:25:32 · 2530 阅读 · 0 评论 -
Redis分布式锁原理
业务背景:后台定时任务刷新Redis的数据到数据库中,有多台机器开启了此定时同步的任务,但是需要其中一台工作,其他的作为备用,提高可用性。使用Redis分布式锁进行限制,拿到锁的机器去执行具体业务,拿不到锁的继续轮询。分布式锁原理分布式锁:当多个进程不在同一个系统中,多个进程共同竞争同一个资源,用分布式锁控制多个进程对资源的互斥访问。采用Redis服务器存储锁信息(即SET一个Key表示已加锁),可以实现多进程的并发读锁的状态,如果没有锁,则只允许一个进程加锁。Redis分布式锁实现的关键点:原创 2021-12-15 14:06:21 · 5450 阅读 · 1 评论 -
golang 读取xlsx 文件中的日期字段
golang 读取excel(xlsx文件) 时间格式解析问题起源最近在写一个读取xlsx文件,并解析其中数据的项目,在所有的数据都就绪之后,却遇到了时间格式获取不正确的问题时间格式我查询到的结果我的代码func main() { f, err := excelize.OpenFile("./template.xlsx") if err != nil { log.Fatal(err) } rows := f.GetRows("Sheet1") for _,原创 2021-09-15 17:59:19 · 2578 阅读 · 0 评论 -
JWT认证
什么是JWTJson web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。JWT就是一段字符串,用来进行用户身份认证的凭证,该字符串分成三段【头部、载荷、签证】原创 2021-02-22 19:20:34 · 329 阅读 · 0 评论 -
Golang 中下划线的作用
golang 中的下划线有3种用法。忽略返回值比如某个函数返回三个参数,但是只需要其中的俩个,另外一个参数可以忽略:v1,v2,_ := function(...)用在变量(特别是接口断言)如果定义了一个接口(interface):type Foo interface{ Say() }然后定义了一个结构体(struct)type Dog struct {}然后希望在代码中判断Dog 这个struct 是否实现了Foo 这个interfacevar _Foo = Do原创 2021-01-22 10:44:17 · 657 阅读 · 0 评论 -
在不同的文件中实现接口失败
想要在store–> readwriter–> message.go 中实现store–> message.go 中定义的接口:实现不了:最后的原因:在 store–> message.go 中定义的接口:GetsByIDInSession(ctx context.Context, session *xorm.Session, ids ...int64) ([]*model.Message, error)中的xorm 包是 "xorm.io/xorm"在 store–.原创 2020-12-28 16:15:59 · 145 阅读 · 0 评论 -
WARNING: Missing ‘go_package‘ option in “person.proto“,
是因为在 proto3 的语法中缺少了 option go_package。解决:在syntax下面添加option信息option go_package = "aaa;bbb";aaa 表示生成的go文件的存放地址,会自动生成目录的。bbb 表示生成的go文件所属的包名解决方法://package message; //注释掉包option go_package = ".;protoes"; //新增该行比如:option go_package = "./pbs;messag原创 2020-12-14 10:51:57 · 1625 阅读 · 1 评论 -
golang 占位符”
golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。#定义示例类型和变量type Human struct { Name string}var people = Human{Name:"zhangsan"}普通占位符占位符 说明 举例 输出%v 相应值的默认格式。 Printf("%v", people) {zh原创 2020-11-19 15:17:48 · 625 阅读 · 0 评论 -
Goland 中import 包没有报错,但是使用包下的方法会报错
Goland 中import 包没有报错,import "github.com/aliyun/aliyun-oss-go-sdk/oss"但是使用包下的方法会报错:oss.New()标红:Unresolved reference 'New'解决方法:在terminal 里运行:进入到项目目录下:1. go mod init 项目名称(该文件所在的包)2. go mod vendor3. go mod tidy...原创 2020-10-12 15:28:55 · 1734 阅读 · 0 评论 -
单元测试出现的问题
在写单元测试的时候遇到这种问题:=== RUN Testxxx Testxxx: box_test.go:239: missing call(s) to *xxxmock.Mockxxx.xxx(is anything, is anything, is anything) xxx/xxx/xxx/box_test.go:202 Testxxx: box_test.go:239: aborting test due to missing call(s)--- FAIL: Testx.原创 2020-10-10 11:04:22 · 4673 阅读 · 0 评论 -
SDK 和 API 的区别是什么?
https://www.zhihu.com/question/21691705转载 2020-09-18 16:40:44 · 139 阅读 · 0 评论 -
Go 面向包的设计和架构分层
Go 面向包的设计和架构分层转载 2020-09-17 14:16:50 · 921 阅读 · 0 评论 -
github.com/golang/glog. Golang glog使用详解
https://www.cnblogs.com/sunsky303/p/11081165.htmlpackage mainimport ( "flag" "github.com/golang/glog")func main() { flag.Parse() defer glog.Flush() glog.Info("This is info message") glog.Infof("This is info message:%v",12345) glog.InfoDepth(1原创 2020-09-11 18:35:09 · 2344 阅读 · 0 评论 -
Bazel
bazel:是一个可以快速构建和测试任意规模软件的编译工具,能够用来编译大部分语言。Bazel使用分布式缓存和增量构建方法,使得编译更加快速。Bazel 主要文件使用 Bazel 管理的项目一般包含以下几种 Bazel 相关的文件:WORKSPACE,BUILD(.bazel),.bzl 和 .bazelrc 等。其中 WORKSPACE 和 .bazelrc 放置于项目的根目录下,BUILD.bazel 放项目中的每个文件夹中(包括根目录), .bzl 文件可以根据用户喜好自由放置,一般可放在项目根目原创 2020-09-03 17:25:17 · 2701 阅读 · 0 评论 -
github.com/golang/mock/gomock. GoMock 框架及 测试用例. go generate 相结合
要写出好的测试代码,必须精通相关的测试框架。对于Golang的程序员来说,至少需要掌握下面四个测试框架:GoConveyGoStubGoMockMonkeyGoMock是由Golang官方开发维护的测试框架,实现了较为完整的基于interface的Mock功能,能够与Golang内置的testing包良好集成,也能用于其它的测试环境中。GoMock测试框架包含了GoMock包和mockgen工具两部分,其中GoMock包完成对桩对象生命周期的管理,mockgen工具用来生成interface对转载 2020-08-21 14:39:34 · 2305 阅读 · 0 评论 -
使用Makefile 来构建 Docker
Makefile是什么Makefile是make命令的规则配置文件。make命令是什么?先来看看make在哪里~ > whereis makemake: /usr/bin/make /usr/share/man/man1/make.1.gz可以看到make是bin下的以可执行文件。 看看用户手册MAKE(1) User Commands转载 2020-08-21 11:16:57 · 1042 阅读 · 0 评论 -
GolangCI-Lint
GolangCI-Lint是一个lint聚合器,它的速度很快,平均速度是gometalinter的5倍。它易于集成和使用,具有良好的输出并且具有最小数量的误报。而且它还支持go modules。最重要的是免费开源。在MacOS上面,你还可以使用brew进行安装。brew install golangci/tap/golangci-lintbrew upgrade golangci/tap/golangci-lint本地安装完成后,你使用golangci-lint --version是看不到它的版本原创 2020-08-21 10:51:53 · 1699 阅读 · 0 评论 -
Makefile中.PHONY的作用
https://www.cnblogs.com/idorax/p/9306528.htmlPHONY 目标并非实际的文件名:只是在显式请求时执行命令的名字。有两种理由需要使用PHONY 目标:避免和同名文件冲突,改善性能。如果编写一个规则,并不产生目标文件,则其命令在每次make 该目标时都执行。例如:clean: rm *.o temp因为"rm"命令并不产生"clean"文件,则每次执行"make clean“的时候,该命令都会执行。如果目录中出现了"clean"文件,则规则失效了:没有依原创 2020-08-21 10:36:29 · 1356 阅读 · 0 评论 -
GitLab CI/CD
https://segmentfault.com/a/1190000010442764GitLab CI / CD是GitLab内置的工具,用于通过连续方法进行软件开发:软件开发的连续方法基于自动执行脚本,以最大程度地减少在开发应用程序时引入错误的机会。从开发新代码到部署新代码,他们几乎不需要人工干预,甚至根本不需要干预。它涉及到在每次小的迭代中就不断地构建,测试和部署代码更改,从而减少了基于错误或失败的先前版本开发新代码的机会。此方法有三种主要方法,每种方法都将根据最适合您的策略的方式进行应用。转载 2020-08-19 19:18:41 · 289 阅读 · 0 评论 -
Gitlab 之 mac 安装 gitlab-runner
Gitlab 之 mac 安装 gitlab-runner用homebrew进行安装,在命令行中直接执行brew install gitlab-runner注册runner注册runner,你需要有一个项目,并且需要至少master权限。打开settings->CI/CD页面,选择第二项Runners settings,左侧会显示与当前项目相关的参数。1)执行gitlab-runner register2)指定git的URL Please enter the gitlab-ci原创 2020-08-19 17:22:28 · 3350 阅读 · 0 评论 -
Docker
Docker是一个让开发者可以打包应以及依赖包到一个可移植的容器中,然后发布发到任何流行的Linux机器上 或 Windows 机器上,可以实现虚拟化,容器完全使用沙箱机制,相互之间不会有任何接口。一个完整的Docker的组成:DockerClient 客户端Docker Daemon 守护进程Docker Image 镜像DockerContainer 容器Docker架构:Docker 使用客户端-服务端(C/S)结构模式,使用远程API来管理和创建Docker 容器。Docker转载 2020-08-18 20:20:06 · 154 阅读 · 0 评论 -
Makefile
在开发一个系统时,一般是将一个系统分成几个模块,这样做提高了系统的可维护性,但由于各个模块间不可避免存在关联,所以当一个模块改动后,其他模块也许会有所更新,当然对小系统来说,手工编译连接是没问题,但是如果是一个大系统,存在很多个模块,那么手工编译的方法就不适用了。为此,在Linux系统中,专门提供了一个make命令来自动维护目标文件,与手工编译和连接相比,make命令的优点在于他只更新修改过的文件(在Linux中,一个文件被创建或更新后有一个最后修改时间,make命令就是通过这个最后修改时间来判断此文件是否原创 2020-08-10 21:36:31 · 309 阅读 · 0 评论 -
Dockerfile entrypoint.sh
DockerfileDocker通过读取Dockerfile文件中的指令自动构建镜像。Dockerfile文件为一个文本文件,里面包含构建镜像所需的所有的命令。Dockerfile文件遵循特定的格式和指令集Docker镜像由只读层组成,每个层都代表一个Dockerfile指令。这些层是堆叠的,每个层都是前一层变化的增量。https://juejin.im/post/6844903922830671885...转载 2020-08-10 21:24:35 · 1554 阅读 · 0 评论 -
gitlab-ci
gitlab-ci配置详解(一)https://segmentfault.com/a/1190000011881435gitlab-ci配置详解(二)https://segmentfault.com/a/1190000011890710?utm_source=sf-relatedJB的git之旅-gitlab ci介绍https://juejin.im/post/6844903609864290311JB的git之旅–.gitlab-ci.yml介绍https://juejin.im/post原创 2020-08-10 21:21:11 · 112 阅读 · 0 评论 -
github.com/go-xorm/xorm. XORM-Engine Group
https://www.bookstack.cn/read/go-xorm-0.6.5/README.mdhttps://www.bookstack.cn/read/go-xorm-0.6.5/chapter-01-2.engine_group.md创建 ORM 引擎所有操作均需要事先创建并配置 ORM 引擎才可以进行。XORM支持两种 ORM 引擎,即 Engine 引擎和 Engine Group 引擎。一个 Engine 引擎用于对单个数据库进行操作,一个 Engine Group 引擎用于转载 2020-08-10 20:21:57 · 1342 阅读 · 0 评论 -
github.com/gin-gonic/gin. Gin--EngineGroup
https://juejin.im/post/6844903789300826125轻量级 Web 框架 Gin 结构分析Go 语言最流行了两个轻量级 Web 框架分别是 Gin 和 Echo,这两个框架大同小异,都是插件式轻量级框架,背后都有一个开源小生态来提供各式各样的小插件,这两个框架的性能也都非常好,裸测起来跑的飞快。本节我们只讲 Gin 的实现原理和使用方法,Gin 起步比 Echo 要早,市场占有率要高一些,生态也丰富一些。go get -u github.com/gin-gonic/gi转载 2020-08-10 20:09:01 · 1083 阅读 · 0 评论 -
gRPC
RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。如下图所示就是一个典型的RPC结构图。gRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议开发,且支持众多开发语言。 gRPC提供了一种简单的方法来原创 2020-08-04 15:31:23 · 378 阅读 · 0 评论 -
Protobuf
深入 ProtoBuf-简介https://www.jianshu.com/p/a24c88c0526aProtobuf: protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。简单来讲, ProtoBuf 是结构数据序列化方法,可简单类比于 XML,其具有以下特点:转载 2020-08-04 11:00:01 · 601 阅读 · 0 评论 -
github.com/garyburd/redigo/redis. Redis--go
rediogo 标准go redis 官方库 获取:go get github.com/garyburd/redigo/redis连接redispackage mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { c, err := redis.Dial("tcp", "127...原创 2020-08-04 10:21:28 · 2242 阅读 · 1 评论 -
Mysql--XORM
xormxorm是一个Go语言ORM库. 通过它可以使数据库操作非常简便.用法入门:前提:定义本文中用到的struct和基本代码如下// 银行账户type Account struct { Id int64 Name string `xorm:"unique"` Balance float64 Version int `xorm:"version"` // 乐观锁}var x *xorm.Engine创建orm引擎注意:若想配合mysql,原创 2020-08-04 09:55:35 · 600 阅读 · 0 评论 -
Mysql -- database/sql / GORM
Go操作Mysql数据库使用Go操作MySQL等数据库,一般有两种方式:一是使用database/sql接口,直接在代码里硬编码sql语句;二是使用gorm,即对象关系映射的方式在代码里抽象的操作数据库。一般推荐使用第二种方式。使用database/sql接口Go没有内置的驱动支持任何数据库,但是Go定义了database/sql接口,用户可以基于驱动接口开发相应数据库的驱动。但缺点是,直接用 github.com/go-sql-driver/mysql 访问数据库都是直接写 sql,取出结果然后自己原创 2020-08-03 21:43:06 · 703 阅读 · 2 评论 -
go mod
首先在个人包命名空间目录新建一个文件夹,然后直接使用 go mod init 即可。mkdir $GOPATH/github.com/islishude/gomodtestcd $GOPATH/github.com/islishude/gomodtestgo mod init更新:现在不允许在 GOPATH 下使用 go mod,需要更改成以下命令:mkdir -p ~/gopher/gomodtestcd ~/gopher/gomodtestgo mod init github.com/i原创 2020-08-03 16:59:06 · 576 阅读 · 0 评论 -
MAC使用Homebrew安装Redis
(1) 安装命令brew install redis(2) 查看软件安装及配置文件位置Homebrew安装的软件会默认在/usr/local/Cellar/路径下;redis的配置文件redis.conf存放在/usr/local/etc路径下。(3) 启动redis服务方法一:brew除了可以帮助我们安装软件以外,还可以帮助我们启动软件brew services start redis (用这种方式启动,terminal 窗口关闭后服务不会停止)方法二:redis-server原创 2020-07-31 16:58:44 · 617 阅读 · 0 评论 -
RESTful API增删改查分别使用的 HTTP 方法(verb) 和 返回码
RESTFul API 特点URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。基于“资源”,数据也好、服务也好,在RESTFul设计里一切都是资源。无状态。一次调用一般就会返回结果,不存在类似于“打开连接-访问数据-关闭连接”这种依赖于上一次调用的情况。URL中通常不出现动词,只有名词URL语义清晰、明确使用HTTP的GET、POST、DELETE、PUT来表示对于资源的增删改查使用JSON不使用XML我举个例子:网站:/get_user?id=3RE原创 2020-07-30 16:45:31 · 3485 阅读 · 0 评论 -
Mac系统下MySQL的下载安装和配置教程
https://blog.csdn.net/WinstonLau/article/details/81323340转载 2020-07-30 16:45:05 · 693 阅读 · 0 评论 -
RESTful API 实践
一、URL 设计1.1 动词 + 宾语RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构。比如,GET /articles这个命令,GET是动词,/articles是宾语。动词通常就是五种 HTTP 方法,对应 CRUD 操作。GET:读取(Read)POST:新建(Create)PUT:更新(Update)PATCH:更新(Update),通常是部分更新DELETE:删除(Delete)根据 HTTP 规范,动词一律大写。1.2 动词的覆盖有些客户转载 2020-07-30 14:11:28 · 132 阅读 · 0 评论 -
RESTful 架构
http://www.ruanyifeng.com/blog/2011/09/restful.html越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发在互转载 2020-07-30 11:38:28 · 113 阅读 · 0 评论 -
Charles 的安装和使用
https://juejin.im/post/5c0a430f51882516207d205dhttps://developer.aliyun.com/article/65134原创 2020-07-29 17:41:36 · 141 阅读 · 0 评论 -
Postman 的使用
1.下载Postman2.在本地编写一个服务端3.在Postman上模拟发送请求:Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。它提供功能强大的 Web API & HTTP 请求调试。 它能够发送任何类型的HTTP 请求 (GET,HEAD, POST, PUT…), 附带任何数量的参数+ headers。Postman功能: 主要用于模拟网络请求包 快速创建请求 回放、管理请求 快速设置网络代理get请求页面访问请求(get方法)转载 2020-07-29 16:54:28 · 1119 阅读 · 0 评论