go 上下文:context.Context
Go语言中的上下文(Context)是一种用于在 Goroutines 之间传递取消信号、截止时间和其他请求范围值的标准方式。context 包提供了 Context 类型和一些相关的函数,用于在并发程序中有效地传递上下文信息。
在Go语言中,上下文通常用于以下场景:
请求的传递:当一个请求...[2023/11/17]
Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍
Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍
目录Go 接口:Go中最强大的魔法,接口应用模式或惯例介绍一、前置原则二、一切皆组合2.1 一切皆组合2.2 垂直组合2.2.1 第一种:通过嵌入接口构建接口2.2.2 第二种:通过嵌入接口构建结构体类型2.2.3 第三种:通过嵌入结构体类...[2023/11/10]
Go类型嵌入介绍和使用类型嵌入模拟实现“继承”
Go类型嵌入介绍和使用类型嵌入模拟实现“继承”
目录Go类型嵌入介绍和使用类型嵌入模拟实现“继承”一、独立的自定义类型二、继承三、类型嵌入3.1 什么是类型嵌入四、接口类型的类型嵌入4.1 接口类型的类型嵌入介绍4.2 一个小案例五、结构体类型的类型嵌入5.1 结构体类型的类型嵌入介绍5.2 小...[2023/11/6]
【Go 编程实践】从零到一:创建、测试并发布自己的 Go 库
为什么需要开发自己的 Go 库
在编程语言中,包(Package)和库(Library)是代码组织和复用的重要工具。在 Go 中,包是代码的基本组织单位,每个 Go 程序都由包构成。包的作用是帮助组织代码,提供封装和代码复用的机制。
Go 包可以包含函数、类型、变量和常量等,这些元素可以被其他...[2023/11/6]
Golang 面向对象深入理解
1 封装
Java 中封装是基于类(Cla ),Golang 中封装是基于结构体(struct)
Golang 的开发中经常直接将成员变量设置为大写使用,当然这样使用并不符合面向对象封装的思想。
Golang 没有构造函数,但有一些约定俗成的方式:
提供 NewStruct(s Struc...[2023/11/1]
Go 并发编程 - 并发安全(二)
什么是并发安全
并发情况下,多个线程或协程会同时操作同一个资源,例如变量、数据结构、文件等。如果不保证并发安全,就可能导致数据竞争、脏读、脏写、死锁、活锁、饥饿等一系列并发问题,产生重大的安全隐患,比如12306抢到同一张火车票、多个用户抢到只剩一件库存的商品。而并发安全就是为了避免这些问题。G...[2023/11/1]
Go语言基准测试(benchmark)三部曲之一:基础篇
欢迎访问我的GitHub
这里分类和汇总了欣宸的全部原创(含配套源码):https: github.com/zq2599/blog_demos
关于基准测试(benchmark)
Go的标准库内置的testing框架提供了基准测试(benchmark)功能,可以用来验证本地方法在串行或者并...[2023/11/1]
用go封装一下临时token
用go封装一下临时token
本篇为用go设计开发一个自己的轻量级登录库/框架吧 的临时token篇,会讲讲临时token的实现,给库/框架增加新的功能。
Github:https: github.com/weloe/token-go
临时token也算是比较常见的业务,例如登录验证码信息,...[2023/10/30]
Go 常用标准库之 fmt 介绍与基本使用
Go 常用标准库之 fmt 介绍与基本使用
目录Go 常用标准库之 fmt 介绍与基本使用一、介绍二、向外输出2.1 Print 系列2.2 Fprint 系列2.3 Sprint 系列2.4 Errorf 系列三、格式化占位符3.1 通用占位符3.2 布尔型3.3 整型3.4 浮点数与复数3....[2023/10/25]
2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100) 对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N) 现给出K(
2023-10-25:用go语言,假如某公司目前推出了N个在售的金融产品(1<=N<=100)
对于张三,用ai表示他购买了ai(0<=ai<=10^4)份额的第i个产品(1<=i<=N)
现给出K(1<=K<=N)个方案,通过这些方案,能够支...[2023/10/25]
Go 包操作之如何拉取私有的Go Module
Go 包操作之如何拉取私有的Go Module
在前面,我们已经了解了GO 项目依赖包管理与Go Module常规操作,Go Module 构建模式已经成为了 Go 语言的依赖管理与构建的标准。
在平时使用Go Module 时候,可能会遇到以下问题:
在某 module 尚未发布到类似Gi...[2023/10/25]
Go开发IDE全览:GoLand vs VSCode全面解析
关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
一、引言
在软件开发的世界里,开发...[2023/10/25]
Go命令大全:全面解析与实践
本文详尽地探讨了Go语言的内建命令集,包括但不限于go build、go run、go get等。文章首先列举了所有常用的Go命令,并用表格形式简洁地解释了它们的功能。随后,我们逐一深入讲解了每个命令的使用说明、应用场景,以及实际操作中可能遇到的输出结果。
关注【TechLeadClou...[2023/10/25]
【对象存储】Minio本地运行和 golang客户端基本操作【对象存储】Minio本地运行和 golang客户端基本操作
运行环境
OS和Golang版本:
go version go1.21.0 darwin/arm64
安装
源码安装
下载最新版本的源码,地址https: github.com/minio/minio后编译
cd minio
go build main...[2023/10/20]
Go 函数的健壮性、panic异常处理、defer 机制
Go 函数的健壮性、panic异常处理、defer 机制
目录Go 函数的健壮性、panic异常处理、defer 机制一、函数健壮性的“三不要”原则1.1 原则一:不要相信任何外部输入的参数1.2 原则二:不要忽略任何一个错误1.3 原则三:不要假定异常不会发生二、Go 语言中的异常:pan...[2023/10/20]
go使用snmp库查询mib数据
转载请注明出处:
OID(Object Identifier)是一种用于标识和唯一命名管理信息库中的对象的标准方式。给定一个OID,可以确定特定的管理信息库对象,并对其进行操作。
go语言使用snmp库中的 k-sone nmpgo 实现相关mib查询的代码如下:
package...[2023/10/19]
Go 函数多返回值错误处理与error 类型介绍
Go 函数多返回值错误处理与error 类型介绍
目录Go 函数多返回值错误处理与error 类型介绍一、error 类型与错误值构造1.1 Error 接口介绍1.2 构造错误值的方法1.2.1 使用errors包1.2.2 自定义错误类型二、error 类型的好处2.1 第一点:统一了错误类...[2023/10/19]
struct 结构体【GO 基础】
〇、前言
虽然 Go 语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念,但是可以通过结构体的内嵌,再配合接口,来实现面向对象,甚至具有更高的扩展性和灵活性。那么本文就将详细看下怎么使用结构体。
一、结构体的定义和实例化
Go 语言中的基础数据类型可以表示一些事物的基本属性,但是当想...[2023/10/13]
go 流程控制之switch 语句介绍
go 流程控制之switch 语句介绍
目录go 流程控制之switch 语句介绍一、switch语句介绍1.1 认识 switch 语句1.2 基本语法二、Go语言switch语句中case表达式求值顺序2.1 switch语句中case表达式求值次序介绍2.2 switch语句中case表达...[2023/10/13]
Go方法特性详解:简单性和高效性的充分体现
本文深入探讨了Go语言中方法的各个方面,包括基础概念、定义与声明、特性、实战应用以及性能考量。文章充满技术深度,通过实例和代码演示,力图帮助读者全面理解Go方法的设计哲学和最佳实践。
关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架...[2023/10/11]
基于go语言gin框架的web项目骨架基于go语言gin框架的web项目骨架
节省时间与精力,更高效地打造稳定可靠的Web项目:基于Go语言和Gin框架的完善Web项目骨架。无需从零开始,直接利用这个骨架,快速搭建一个功能齐全、性能优异的Web应用。充分发挥Go语言和Gin框架的优势,轻松处理高并发、大流量的请求。构建可扩展性强、易于维护的代码架构,保证项目的长期稳定运行...[2023/9/25]
你知道Golang的模板怎么用吗?带你了解动态文本的生成!
Golang Template
Go语言中的Go Template是一种用于生成文本输出的简单而强大的模板引擎。它提供了一种灵活的方式来生成各种格式的文本,例如HTML、XML、JSON等。
Go Template的具有以下主要特性:
简洁易用:Go Template语法简洁而易于理解。...[2023/9/13]
Go运算操作符全解与实战:编写更高效的代码!
本文全面探讨了Go语言中的各类运算操作符,从基础的数学和位运算到逻辑和特殊运算符。文章旨在深入解析每一种运算操作符的工作原理、应用场景和注意事项,以帮助开发者编写更高效、健壮和可读的Go代码。
简介
Go语言,作为一种现代的编程语言,不仅因为其简单易读的语法而受到欢迎,还因为它的性能和...[2023/9/10]
一文简单了解函数类型
1. 引言
函数在Go语言中是属于一等公民,基于此,本文将简单介绍下Go语言中的函数类型,了解下其具体用法,
为后续了解函数类型的具体用途打下基础。
2. 函数类型说明
2.1 什么是函数类型
在 Go中,函数是一等公民,这意味着你可以直接使用函数类型,是Go语言的一种内置类型,具有以下通用...[2023/9/10]
Go类型全解:常量与变量大全!
本篇文章深入探讨了 Go 语言中类型确定值、类型不确定值以及对应类型转换的知识点,后续充分解析了常量与变量及其高级用法,并举出丰富的案例。
关注公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同...[2023/9/9]
PGO in Go 1.21
原文在这里。
由 Michael Pratt 发布于 2023年9月5日
在2023年早些时候,Go 1.20发布了供用户测试的概要版本的基于性能分析的优化(PGO)。经过解决预览版已知的限制,并得益于社区反馈和贡献的进一步改进,Go 1.21中的PGO支持已经准备好供一般生产使用!请查...[2023/9/9]
Go 语言内置类型全解析:从布尔到字符串的全维度探究
关注微信公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
本文深入探讨了 Go 语言...[2023/9/9]
Go学习笔记1
学习路线
2023-Go全链路工程师课纲 https: www.proce on.com/view/link/63594cd97d9c0854f9ac855e
一、搭建环境
https: tudygolang.com/dl
msi需要自己安装
安装目录最好没有中文
1. 简单dos命令...[2023/9/6]
微服务架构|go-zero 的自适应熔断器
原文链接: go-zero 的自适应熔断器
上篇文章我们介绍了微服务的限流,详细分析了计数器限流和令牌桶限流算法,这篇文章来说说熔断。
熔断和限流还不太一样,限流是控制请求速率,只要还能承受,那么都会处理,但熔断不是。
在一条调用链上,如果发现某个服务异常,比如响应超时。那么调用者为了避免...[2023/9/4]
为何每个开发者都在谈论Go?
本文深入探讨了Go语言的多个关键方面,从其简洁的语法、强大的并发支持到出色的性能优势,进一步解析了Go在云原生领域的显著应用和广泛的跨平台支持。文章结构严谨,逐一分析了Go语言在现代软件开发中所占据的重要地位和其背后的技术原理。
关注TechLeadCloud,分享互联网架构、云服务技术...[2023/9/4]
Go语言-Slice详解Go语言-Slice详解
Go语言中的slice表示一个具有相同类型元素的可变长序列,语言本身提供了两个操作方法:
创建:make([]T,len,cap)
追加: append(slice, T ...)
同时slice支持随机访问。本篇文章主要对slice的具体实现进行总结。
1. 数据结构
go语言的sli...[2023/9/1]
embed简介
go embed 是 Go 1.16 中引入的特性,它允许将文件嵌入到 Go 代码中,以便在运行时访问这些文件。这对于将静态资源(如 HTML、CSS、JavaScript 文件)直接嵌入到 Go 二进制文件中,以及简化文件分发和部署非常有用。下面是关于 go embed 的详细介绍:
使用方...[2023/8/29]
go语言vscode集成开发环境搭建
目录本篇概要集成开发环境工具(ide)Goland或IntelliJ IDEAVisual Studio Code其他集成开发环境Visual Studio Code的go语言开发环境搭建Visual Studio Code安装go编译环境安装配置go环境变量安装go语言插件使用golang编程...[2023/8/14]
golang1.21新特性速览
经过了半年左右的开发,golang 1.21 在今天早上正式发布了。
这个版本中有不少重要的新特性和变更,尤其是在泛型相关的代码上。
因为有不少大变动,所以建议等第一个patch版本也就是1.21.1出来之后再进行升级,以免遇到一些意外的bug带来麻烦。
好了,一起来看看1.21带来的新特...[2023/8/11]
go-zero 是如何实现计数器限流的?
原文链接: 如何实现计数器限流?
上一篇文章 go-zero 是如何做路由管理的? 介绍了路由管理,这篇文章来说说限流,主要介绍计数器限流算法,具体的代码实现,我们还是来分析微服务框架 go-zero 的源码。
在微服务架构中,一个服务可能需要频繁地与其他服务交互,而过多的请求可能导致性能下...[2023/8/11]
go-zero 是如何实现令牌桶限流的?
原文链接:
上一篇文章介绍了 如何实现计数器限流?主要有两种实现方式,分别是固定窗口和滑动窗口,并且分析了 go-zero 采用固定窗口方式实现的源码。
但是采用固定窗口实现的限流器会有两个问题:
会出现请求量超出限制值两倍的情况
无法很好处理流量突增问题
这篇文章来介绍一下令牌桶算...[2023/8/11]
golang trace view 视图详解
大家好,我是蓝胖子,在golang中可以使用go pprof的工具对golang程序进行性能分析,其中通过go trace 命令生成的trace view视图对于我们分析系统延迟十分有帮助,鉴于当前对trace view视图的介绍还是很少,在粗略的看过trace统计原理后,我将对这部分做比较详...[2023/8/9]
「Go笔记-01」Golang发展简史、著名项目及官方库API文档基本使用
引言
Golang,又称Go语言,是一门开源的静态类型编译型编程语言。自从2007年由谷歌的罗伯特·格里泽默(Robert Griesemer)、罗布·派克(Rob Pike)和肯·汤普森(Ken Thompson)共同设计,Go语言已经成为了众多开发者的首选。
.center { displa...[2023/8/7]
基于Go编写一个可视化Navicat本地密码解析器基于Go编写一个可视化Navicat本地密码解析器
前提
开发小组在测试环境基于docker构建和迁移一个MySQL8.x实例,过程中大意没有记录对应的用户密码,然后发现某开发同事本地Navicat记录了根用户,于是搜索是否能够反解析Navicat中的密码掩码(这里可以基本断定Navicat对密码是采用了对称加密算法),于是发现了这个仓库:
h...[2023/8/4]
VScode 中golang 基准测试 go test -bench .VScode 中golang 基准测试 go test -bench .
目的:基准测试的主要目的是比较不同实现方式之间的性能差异,找出性能瓶颈。
1 准备以_test.go结尾文件和导入testing包
在命名文件时需要让文件必须以_test结尾,在文件中导入testing包。基准测试可以测试一段程序的运行性能及耗费CPU的程度,获得代码内存占用和运行效率的性能数...[2023/8/4]
【go语言】2.2.1 数组和切片
数组和切片是 Go 语言中常用的数据结构,它们都可以存储多个同类型的元素。
数组
数组是具有固定长度的数据类型,它的长度在定义时就已经确定,不能随意改变。
你可以使用以下方式定义一个数组:
var arr [3]int
这段代码定义了一个长度为 3 的 int 类型...[2023/7/28]
关于开设go语言专题的说明关于开设go语言专题的说明
本专题写作的目的其实是分享go语言编程的使用场景,介绍go语言编程的方方面面,让大家能够用好这个由google公司发明的强力工具,提升大家在这方面的生产力,毕竟”君子善假与物也“嘛。
这里我先说明一下,我并不是一个对go语言的所有一切都认同的人,你会发现很多相关从业者也会吐槽go语言的“专制”...[2023/7/26]
想在golang里用好泛型还挺难的
golang的泛型已经出来了一年多了,从提案被接受开始我就在关注泛型了,如今不管是在生产环境还是开源项目里我都写了不少泛型代码,是时候全面得回顾下golang泛型的使用体验了。
先说说结论,好用是好用,但问题也很多,有些问题比较影响使用体验,到了不吐不快的地步了。
这篇文章不会教你泛型的基础...[2023/7/24]
golang channel 未关闭导致的内存泄漏golang channel 未关闭导致的内存泄漏
现象
某一个周末我们的服务 oom了,一个比较重要的job 没有跑完,需要重跑,以为是偶然,重跑成功,因为是周末没有去定位原因
又一个工作日,它又oom了,重跑成功,持续观察,job 在oom之前竟然占用了30g左右(这里我们的任务比较大的数据量都在内存中计算,所以这里机器内存量大一点)
应...[2023/7/24]
大白话讲讲 Go 语言的 sync.Map(二)
上一篇文章 《大白话讲讲 Go 语言的 sync.Map(一)》 讲到 entry 数据结构,原因是 Go 语言标准库的 map 不是线程安全的,通过加一层抽象回避这个问题。
当一个 key 被删除的时候,比如李四销户了,以前要撕掉小账本,现在可以在大账本上写 expunged,
对,什么也...[2023/7/21]
简单了解下最近正火的SwissTable简单了解下最近正火的SwissTable
去年看到字节跳动给golang提了i ue建议把map的底层实现改成Swi Table的时候,我就有想写这篇博客了,不过因为种种原因一直拖着。
直到最近遇golang官方开始讨论为了是否要接受Swi Table作为map的默认实现,以及实际遇到了一个hashtable有关的问题,促使我重新思考...[2023/7/19]
我是如何组织 Go 代码的(目录结构 依赖注入 wire)
背景
对于大多数 Gopher 来说,编写 Go 程序会直接在目录建立 main.go,xxx.go,yyy.go……
不是说不好,对于小型工程来说,简单反而简洁明了,我也提倡小工程没必要整一些花里胡哨的东西。
毕竟 Go 语言作为现代微服务的开发新宠,各个方面都比较自由,没有很多约束。我想...[2023/7/19]
让golang程序生成coredump文件并进行调试让golang程序生成coredump文件并进行调试
今天讲讲怎么让golang程序生成coredump文件,并且进行调试的。
别看我写了不少golang的博客,其实我平时写c++的时间更多,所以也算和coredump是老相识了。core dump文件实际上是进程在某个时间点时的内存映像,当时进程使用的内存是啥样就会被原样保存下来存在文件系统的某...[2023/7/10]
Go 语言 context 都能做什么?
原文链接: Go 语言 context 都能做什么?
很多 Go 项目的源码,在读的过程中会发现一个很常见的参数 ctx,而且基本都是作为函数的第一个参数。
为什么要这么写呢?这个参数到底有什么用呢?带着这样的疑问,我研究了这个参数背后的故事。
开局一张图:
核心是 Context ...[2023/7/3]
一文了解Go语言的I/O接口设计
1. 引言
I/O 操作在编程中扮演着至关重要的角色。它涉及程序与外部世界之间的数据交换,允许程序从外部,如键盘、文件、网络等地方读取数据,也能够将外界输入的数据重新写入到目标位置中。使得程序能够与外部环境进行数据交换、与用户进行交互、实现数据持久化和文件操作、进行网络通信等。因此,了解和掌握I...[2023/6/28]