Golang中的包及包管理工具go?mod详解
目录一、包二、包管理工具go mod三、init函数四、使用第三方包 一、包
1.包的种类:系统内置包、自定义包、第三方包。
(1)系统内置包:go语言自带包,如str.conv、fmt等
(2)自定义包:开发者自己写的包
(3)第三方包:属于自定义包的一种,需下载到本地才能使用, ...[2022/7/25]
golang构建工具Makefile使用详解golang构建工具Makefile使用详解
目录正文 正文
可能是因为编译太简单了,golang 并没有一个官方的构建工具(类似于 java 的 maven 和 gradle之类的),但是除了编译,我们可能还需要下载依赖,运行测试,甚至像 easyjson,protobuf,thrift 这样的工具下载和代码生成,如果没有构建工具,这些工...[2022/7/25]
Go语言实现超时的三种方法实例
目录前言方法一:用两个通道 + A协程sleep方法二:使用Timer(定时器)方法三:使用context.WithTimeout附:go 实现超时退出总结 前言
超时,指一个协程A开启另一个协程B,A会阻塞等待B一段指定的时间,例如:5秒,A通知B结束(也有可能不通知,让B继续运行)。也就是说...[2022/7/20]
go语言中基本数据类型及应用快速了解go语言中基本数据类型及应用快速了解
目录整数特殊的整数类型如果想确定int和uint的大小溢出浮点数复数布尔值字符串字符串的“长度”与遍历字符串的做法字符串的“长度”遍历字符串Rune与Byte(字节)字符串与字节slice的转换字符串不可变基本类型的值都是可比较的数值的类型转换运算符常...[2022/7/20]
go开源项目用户名密码验证的逻辑鬼才写法
引言
这两天在做微服务上云的事,之前一直是本地运行,后来在服务器搭建了生产环境集群。上云时出现了一些幺蛾子
云上的服务都需要身份验证的,没有专用网关的话,至少也要设置 basicAuth(用户名+密码的方式)
今天使用 Golang 知名项目 Viper 连接远端配置中心 Consul ...[2022/7/20]
Go中的关键字any interface是否会成为历史
目录引言示例增加新关键字后的对比 引言
大家在看 Go1.18 泛型的代码时,不知道是否有留意到一个新的关键字 any。
示例
func Print[T any](s []T) {}
之前没有专门提过,但有没有小伙伴以为这个关键字,是泛型代码专属的?
其实不是...在这次新的...[2022/7/20]
Go语言中使用urfave/cli命令行框架
命令行参数处理以及urfave/cli使用
1.通过Os.Args获取cli的参数
package main
import (
"fmt"
"os"
)
func main() {
if(len(os.Args) > 1) {
...[2022/7/19]
Go实现整合Logrus实现日志打印
目录1 初步使用2 增加标签WithFields3 配置常见参数4 输出日志到文件5 利用Hooks将日志输出到其他地方 Github:github.com irupsen/lo…
1 初步使用
package main
import (
? "context"
? ...[2022/7/4]
基于微服务框架go-micro开发gRPC应用程序
go-micro是golang的一个微服务框架。这篇文章将介绍使用go-micro最新版本v4开发gRPC服务的方式。
1、安装protoc
这个工具也称为proto编译器,可以用来生成各种开发语言使用proto协议的代码。
下载地址:https: github.com/protocol...[2022/7/4]
golang select 机制和超时问题
golang 中的协程使用非常方便,但是协程什么时候结束是一个控制问题,可以用 select 配合使用。 首先声明,golang 使用并不熟悉,本文仅仅是记录使用过程中遇到的一些坑。 子协程和父协程的通信通常用 context 或者 chan。我遇到一个通常的使用场景,在子协程中尝试多次处理,父协...[2022/6/27]
Go语言单元测试基础从入门到放弃
目录Go语言测试go test工具单元测试函数格式单元测试示例go test -vgo test -run回归测试跳过某些测试用例子测试表格驱动测试介绍示例并行测试使用工具生成测试代码测试覆盖率testify/a ert安装使用示例总结 Go语言测试
这是Go单测从入门到放弃系列教程的第0篇,主...[2022/6/21]
Go语言单元测试模拟服务请求和接口返回
目录前言httptestgock安装使用示例总结 前言
这是Go单元测试从入门到放弃系列教程的第1篇,介绍了如何使用httptest和gock工具进行网络测试。
在上一篇《Go单元测试从入门到放弃—0.单元测试基础》中,我们介绍了Go语言编写单元测试的基础内容。
而实际工作中...[2022/6/21]
Go单元测试对数据库CRUD进行Mock测试
目录前言go-sqlmock安装使用示例miniredis安装使用示例总结 前言
最近在实践中也总结了一些如何用表格驱动的方式使用 gock Mock测试外部接口调用。以及怎么对GORM做mock测试,这些等这篇学完基础后,后面再单独写文章给大家介绍。
这是Go语言单元测试系列教程的第3篇,...[2022/6/21]
GoFrame框架数据校验之校验对象校验结构体
目录前言摘要基本概念方法介绍简要说明注意问题TIPS链式操作示例1:单数据校验简单示例进阶示例进阶示例打印结果示例2:Map数据校验示例3:Struct数据校验总结 前言摘要
这篇文章将会为大家介绍GoFrame数据校验中校验对象的知识点,包括:Validator对象常用方法的介绍、单数据校验、...[2022/6/20]
GoFrame基于性能测试得知grpool使用场景
目录前言摘要先说结论测试性能代码运行结果总结 前言摘要
之前写了一篇 grpool goroutine池详解 | 协程管理 收到了大家积极的反馈,今天这篇来做一下grpool的性能测试分析,让大家更好的了解什么场景下使用grpool比较好。
先说结论
grpool相比于goroutine...[2022/6/20]
GoFrame框架数据校验之校验结果Error接口对象
目录基本介绍方法示例注意问题方法详解进阶注意问题总结 上一篇文章介绍了 GoFrame数据校验之校验对象 | 校验结构体 ,得到了大家积极的反馈。
再接再厉,这篇总结分享:GoFrame数据校验之校验结果总结分享。
基本介绍
校验结果为一个Error接口对象。当数据规则校验成功时,校验方...[2022/6/20]
golang时间及时间戳的获取转换
目录一、获取时间1.1 获取当前时间1.2 获取之前/之后的时间获取1分钟之前的时间戳获取一小时之前的时间获取1小时后的时间二、获时间戳2.1 获取当前时间戳2.2 时间转时间戳2.2 时间戳转时间按模板格式化输出模板输出当前时间3. 时间计算3.1 时间加时间段3.2 计算两时间之差 一、获取时间...[2022/6/20]
Golang接口型函数使用小结Golang接口型函数使用小结
目录常规接口实现接口型函数出场进一步改造 什么是接口型函数?顾名思义接口函数指的是用函数实现接口,这样在调用的时候就会非常简便,这种方式适用于只有一个函数的接口。
这里以迭代一个map为例,演示这一实现的技巧。
常规接口实现
defer语句用于延迟函数调用,每次会把一个函数压入栈中,函数...[2022/6/20]
golang?对象深拷贝的常见方式及性能golang?对象深拷贝的常见方式及性能
目录关于golang拷贝的概念完整代码总结 关于golang拷贝的概念
Go语言中所有赋值操作都是值传递,如果结构中不含指针,则直接赋值就是深度拷贝;如果结构中含有指针(包括自定义指针,以及切片,map等使用了指针的内置类型),则数据源和拷贝之间对应指针会共同指向同一块内存,这时深度拷贝需要特别...[2022/6/20]
深入了解Go的interface{}底层原理实现
目录1. interface{}初探2. eface3. iface4. 接口转化 1. interface{}初探
Go是强类型语言,各个实例变量的类型信息正是存放在interface{}中的,Go中的反射也与其底层结构有关。
iface 和 eface 都是 Go 中描述interfac...[2022/6/6]
Golang的strings.Split()踩坑记录
目录背景场景前置排查验证打印底层信息追源码类似情况总结 背景
工作中,当我们需要对字符串按照某个字符串切分成字符串数组数时,常用到strings.Split()
最近在使用过程中踩到了个坑,后对踩坑原因做了分析,并总结了使用string.Split可能踩到的坑。最后写本篇文章做复盘总结与分享...[2022/5/30]
golang中按照结构体的某个字段排序实例代码
目录概述从大到小排序按照结构体的某个字段排序使用 sort.Stable 进行稳定排序附:根据结构体中任意字段进行排序总结 概述
golang的sort包默认支持int, float64, string的从小大到排序:
int -> Ints(x []int)float64 ->...[2022/5/30]
go语言beego框架分页器操作及接口频率限制示例
目录获取所有文章数据获取总条数设置每页的条数总页数和当前页码获取分页数据返回数据beego接口频率限制 获取所有文章数据
o := orm.NewOrm()
qs := o.QueryTable("Article")
12
获取总条数
count, _ := qs.Count()...[2022/4/18]
Go模板template用法详解
本文只介绍template的语法和用法,关于template包的函数、方法、template的结构和原理,见:深入解析Go template模板使用详解。
入门示例
以下为test.html文件的内容,里面使用了一个template语法{{.}}。
<!DOCTYPE html&g...[2022/4/18]
深入解析Go template模板使用详解
本文只关注Go text/template的底层结构,带上了很详细的图片以及示例帮助理解,有些地方也附带上了源码进行解释。有了本文的解释,对于Go template的语法以及html/template的用法,一切都很简单。
关于template的语法以及具体使用方法,见:Go template...[2022/4/18]
Go并发4种方法简明讲解
一、goroutine
1、协程(Coroutine)
Golang 在语言层面对并发编程进行了支持,使用了一种协程(goroutine)机制,
协程本质上是一种用户态线程,不需要操作系统来进行抢占式调度,但是又寄生于线程中,因此系统开销极小,可以有效的提高线程的任务并发性,而避免多线程的...[2022/4/7]
Golang原生rpc(rpc服务端源码解读)
创建rpc接口,需要几个条件
方法的类型是可输出的方法的本身也是可输出的方法必须有两个参数,必须是输出类型或者是内建类型方法的第二个参数是指针类型方法返回的类型为error
rpc服务原理分析
server端
服务注册处理网络调用
服务注册 通过反射处理,将接口存入到map中,进行调...[2022/4/7]
Go?interface{}?转切片类型的实现方法
遇到这样一个情况想将变量v转化为[]string类型
var v interface{}
a := []interface{}{"1", "2"}
v = a v 这时还是interface{} 但其实是个 []interface{}
newValue := v.([]string)...[2022/2/9]
对Go语言中的context包源码分析
目录一、包说明分析二、包结构分析三、Context接口类型分析四、后续分析规划五、基于实现类型到常用函数六、With-系列函数七、扩展功能以及如何扩展八、补充 一、包说明分析
context包:这个包分析的是1.15
context包定义了一个Context类型(接口类型),通过这个Cont...[2022/2/9]
golang数组和切片作为参数和返回值的实现
目录1. 数组作为参数和返回值时1.1数组的定义1.2数组作为参数和返回值的时候2.切片作为参数和返回值2.1 切片的定义初始化2.2 切片的存储大致分为3部分2.3 切片作为参数和返回值2.4 append 切片动态增长的原理2.5 copy 函数 通过赋值切片可以使得两个切片的数据不共享3. 总...[2022/2/9]
Go?结构体序列化的实现
目录更改JSON对象中的键在JSON对象中隐藏结构体字段附加内容结构体标签string指令 本文,我们将回到之前写的showMovieHandler方法,并更新它以返回一个JSON响应,表示系统中的单个电影信息。类似于:
{
? ? "id": 123,
? ? "title": "Casa...[2022/1/24]
Go语言实现枚举的示例代码Go语言实现枚举的示例代码
在编程领域里,枚举用来表示只包含有限数量的固定值的类型,在开发中一般用于标识错误码或者状态机。拿一个实体对象的状态机来说,它通常与这个对象在数据库里对应记录的标识状态的字段值相对应。
在刚开始学编程的时候,你一定写过,至少见过直接使用魔术数字进行判断的代码。啥叫魔术数字呢,举个例子,要置顶一个...[2022/1/24]
Go中变量命名规则与实例
目录前言命名习惯很重要良好命名喜欢的特质经验法则大小写混用的变量名变量名避免冗余函数参数的命名返回值的命名方法 Receiver 的命名导出 package 级别变量命名接口类型error 命名Packages 名结论总结 前言
来自 Google 的 Andrew Gerrand 曾经关于 G...[2022/1/18]
beego下让swagger按照更新了controllers的接口信息自动更新commentsRouter_controllers.gobeego下让swagger按照更新了controllers的接口信息自动更新commentsRouter_controllers.go
beego下让swagger按照更新了controllers的接口信息自动更新commentsRouter_controllers.go
(1)在beego环境中,当更新了controllers目录下面的接口后,在swagger的web页面虽然可以看到更新后的接口,但无法正常运行,这是因为sw...[2022/1/18]
为什么要避免在 Go 中使用 ioutil.ReadAll?
原文链接: 为什么要避免在 Go 中使用 ioutil.ReadAll?
ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾。
在 GitHub 上搜索 ioutil.ReadAll,类型选择 Code,语言选择 Go,一共得到了 637307...[2022/1/17]
DDIA 学习笔记
第一章 可靠性、可扩展性、可维护性
? 可靠性: 系统在困境(adversity)(硬件故障、软件故障、人为错误)中仍可正常工作(正确完成功能,并能达到期望的性能水准。
? 可靠性(Reliability) 意味着即使发生故障,系统也能正常工作。故障可能发生在硬件(通常是随机的和不相关的),软...[2022/1/17]
Go Error 嵌套到底是怎么实现的?Go Error 嵌套到底是怎么实现的?
原文链接: Go Error 嵌套到底是怎么实现的?
Go Error 的设计哲学是 「Errors Are Values」。
这句话应该怎么理解呢?翻译起来挺难的。不过从源码的角度来看,好像更容易理解其背后的含义。
Go Error 源码很简单,寥寥几行:
src/builtin/...[2022/1/17]
Go - 如何编写 ProtoBuf 插件 (三) ?Go - 如何编写 ProtoBuf 插件 (三) ?
目录前言演示代码小结推荐阅读
前言
上篇文章《Go - 如何编写 ProtoBuf 插件 (二) 》,分享了基于 自定义选项 定义了 interceptor 插件,然后在 helloworld.proto 中使用了插件,最后在 golang 代码中获取到使用的插件信息。
接上篇,继续分享。...[2022/1/17]
Excelize 2.5.0 正式发布,这些新增功能值得关注
Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel? 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM ...[2022/1/3]
【CGO】C源码编译为动态库供go程序调用(linux环境、arm架构运行平台)
动态库编译
1.安装并配置交叉编译工具链
网上有详细教程
2.go env环境配置
go env -w CGO_ENABLED=1
go env -w GOOS=linux
go env -w GOARCH=arm
go env -w CC=...-...[2021/12/31]
如何在 Go 中将 []byte 转换为 io.Reader?
原文链接: 如何在 Go 中将 []byte 转换为 io.Reader?
在 stackoverflow 上看到一个问题,题主进行了一个网络请求,接口返回的是 []byte。如果想要将其转换成 io.Reader,需要怎么做呢?
这个问题解决起来并不复杂,简单几行代码就可以轻松将其转换...[2021/12/31]
雅可比行列式迭代及优化(golang版)雅可比行列式迭代及优化(golang版)
最近遇到的一个求解雅可比迭代的问题,这个计算方法在 python 中有现成的库,但是在 golang 中没找到相应的实现。
于是根据雅可比行列式的推导实现了一个 golang 版本的雅可比迭代。
?
雅可比迭代
推导
一个 \(N \times N\) 的线性方程组 。
\[Ax = b...[2021/12/31]
Golang项目的配置管理——Viper简易入门配置Golang项目的配置管理——Viper简易入门配置
Golang项目的配置管理——Viper简易入门配置
What is Viper?
From:https: github.com pf13/viper
Viper is a complete configuration solution for Go applications includi...[2021/12/31]
Go 的 golang.org/x/ 系列包和标准库包有什么区别?
在开发过程中可能会遇到这样的情况,有一些包是引入自不同地方的,比如:
golang.org/x/net/html 和 net/html,
golang.org/x/crypto 和 crypto。
那这是什么原因呢?
引用 Go 官方 Wiki 的说法:
The golang.org...[2021/12/24]
GO使用socket和channel实现简单控制台聊天室
使用socket和channel,实现简单控制台聊天室
这里使用socket和channel,演示在GO中如何编写一个简单网络程序
功能分析
聊天室主要功能:用户可以加入/离开聊天室;每个用户发送的消息,广播给所有人
聊天室分为客户端和服务端,客户端负责发送消息和打印服务器消息,服务器...[2021/12/20]
Goland的那些实用技巧
1、 自定义结构体tag
2、go mod tidy / download失败
解决办法:设置goproxy
3、取消/打开代码折叠
4、左侧project栏总是展示当前打...[2021/12/20]
Go - 如何编写 ProtoBuf 插件(二)?
目录前言定义插件使用插件获取自定义选项小结推荐阅读
前言
上篇文章《Go - 如何编写 ProtoBuf 插件 (一) 》,分享了使用 proto3 的 自定义选项 可以实现插件的编写,说到基于 MethodOptions 和 ServiceOptions 选项去实现 method 和 se...[2021/12/20]
Go Micro Dashboard - 实现细节(一)
前言
Go Micro Dashboard是基于go-micro和ng-alain开发的, 它既是go-micro开发过程中的工具,也可以作为学习go-micro的实际案例。接下来我将会详细介绍一下这个项目的一些实现细节。
一、服务列表
服务的发现与注册,是分布式微服务中重要的基础模块,单个服...[2021/12/20]
基于LSM的Key-Value数据库实现初篇
前篇文章对LSM的基本原理,算法流程做了简单的介绍,这篇文章将实现一个简单的基于LSM算法的迷你Key-Value数据库,结合上篇文章的理论与本篇文章的实践使之对LSM算法有更好的理解,当然此版本还有很大问题只是Demo模型,后面也会指出;
??此LSMDB有支持常见的数据库四大功能:CURD...[2021/12/20]
Sentinel-Go 源码系列(三)滑动时间窗口算法的工程实现
要说现在工程师最重要的能力,我觉得工程能力要排第一。
就算现在大厂面试经常要手撕算法,也是更偏向考查代码工程实现的能力,之前在群里看到这样的图片,就觉得很离谱。
算法与工程实现
在 Sentinel-Go 中,一个很核心的算法是流控(限流)算法。
流控可能每个人都听过,但真要手写一个,...[2021/12/20]