Go应用性能优化的8个最佳实践,快速提升资源利用效率!Go应用性能优化的8个最佳实践,快速提升资源利用效率!
作者|Ifedayo Adesiyan
翻译|Seal软件
链接|https: earthly.dev/blog/optimize-golang-for-kubernete
优化服务器负载对于确保运行在 Kubernetes 上的 Golang 应用程序的高性能和可扩...[2023/6/21]
GO 集合 map 使用总结
转载请注明出处:
Go语言的集合称为映射(map),它是一种无序的键值对(key-value)的集合,集合是通过键(key)来快速检索值(value)的,键(key)类似于索引,它指向值(value)的数据。
1.定义 map 变量语法
var m map[keyType]value...[2023/6/21]
深入分析Go语言与C#的异同
摘要:本文由葡萄城技术团队于博客园原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。
前言
为了更加深入地介绍Go语言以及与C#语言的比较,本文将会从多个维度出发进行详细的阐述。首先,将从Go语言的关键字方面介绍Go与C#在语言特性上的异...[2023/6/19]
20个Golang片段让我不再健忘
前言
本文使用代码片段的形式来解释在 go 语言开发中经常遇到的小功能点,由于本人主要使用 java 开发,因此会与其作比较,希望对大家有所帮助。
1. hello world
新手村的第一课,毋庸置疑。
package main
import "f...[2023/6/8]
从源码分析 Go 语言使用 cgo 导致的线程增长从源码分析 Go 语言使用 cgo 导致的线程增长
TDengine Go 连接器 https: github.com/taosdata/driver-go 使用 cgo 调用 taos.so 中的 API,使用过程中发现线程数不断增长,本文从一个 cgo 调用开始解析 Go 源码,分析造成线程增长的原因。
转换 cgo 代码
对 driver...[2023/6/5]
go 实现ringbuffer以及ringbuffer使用场景介绍
ringbuffer因为它能复用缓冲空间,通常用于网络通信连接的读写,虽然市面上已经有了go写的诸多版本的ringbuffer组件,虽然诸多版本,实现ringbuffer的核心逻辑却是不变的。但发现其内部提供的方法并不能满足我当下的需求,所以还是自己造一个吧。
源码已经上传到github
...[2023/6/5]
golang依赖注入工具digo
golang依赖注入工具
digo工具地址:https: github.com/werbenhu/digo
特性
使用注释中的注解
自动代码生成
自动检测循环依赖
编译时期依赖注入
自动初始化
支持实例组的管理
快速开始
更多示例请参考:examples
编写代码和注解
package ...[2023/6/2]
技术招聘漫谈 | 正在招Golang工程师的你,赶快收藏这份识人秘籍!
各位技术面试官,欢迎来到新一期的技术招聘漫谈专栏。
在前两期的专栏中,我们解析了前端工程师以及 Java 工程师 这两个常见技术岗位的招聘技巧。
今天,我们想把目光聚焦在一个前景与“钱”景都非常火热的岗位——Golang 开发工程师。《腾讯 2022 年度研发大数据报告》...[2023/5/30]
用go设计开发一个自己的轻量级登录库/框架吧(拓展篇)
给自己的库/框架拓展一下吧(拓展篇)
主库:weloe/token-go: a light login library.
扩展库:weloe/token-go-extensions (github.com)
本篇给主库扩展一个Adapter提供简单的外部数据存储。
思路
一个库/框架往往不...[2023/5/22]
go语言中实现生产者-消费者模式有哪些方法呢
1. 简介
本文将介绍在 Go 语言中实现生产者消费者模式的多种方法,并重点探讨了通道、条件变量的适用场景和优缺点。我们将深入讨论这些方法的特点,以帮助开发者根据应用程序需求选择最适合的方式。通过灵活运用 Go 语言提供的并发原语,我们能够实现高效、可靠的生产者消费者模式,提升系统的并发性能和可...[2023/5/22]
没想到还有这种骚操作~如何使用Golang实现无头浏览器截图?
前言
在Web开发中,有时需要对网页进行截图,以便进行页面预览、测试等操作。
而使用无头浏览器来实现截图功能,可以避免手动操作的繁琐和不稳定性。
这篇文章将介绍:使用Golang进行无头浏览器的截图,轻松实现页面预览、测试和模拟用户操作。
有趣
这篇文章发完,有朋友在朋友圈留言说:没想...[2023/5/19]
从错误中学习改正Go语言五个坏习惯提高编程技巧从错误中学习改正Go语言五个坏习惯提高编程技巧
目录引言1. 使用 init()2. 使用全局变量3. 忽略错误消息4. GOTO语句 — 跳进陷阱5. 不使用Defer和Recover6. 使用太多次的context.Background() 引言
从他人的错误中学习,通过本指南避免常见陷阱和坏习惯,提高你的 Go 编程技巧
...[2023/5/19]
Golang中下划线(_)的不错用法分享
目录1、忽略返回值2、用在变量(特别是接口断言)3、用在import package4、版本校验,编译时断言 1、忽略返回值
这个应该是最简单的用途,比如某个函数返回三个参数,但是我们只需要其中的两个,另外一个参数可以忽略,这样的话代码可以这样写:
v1, v2, _ := function...[2023/5/19]
Golang定时器Timer与Ticker的使用详解
目录1、概述2、定时器使用2.1 Timer 相关2.2 Ticker 相关3、定时器使用示例3.1 Ticker定时器3.2 Timer定时器4、总结 1、概述
在 Go 里有很多种定时器的使用方法,像常规的 Timer、Ticker 对象,以及经常会看到的 time.After(d Dura...[2023/5/19]
Golang接收者方法语法糖
1、概述
在《Golang常用语法糖》这篇博文中我们讲解Golang中常用的12种语法糖,在本文我们主要讲解下接收者方法语法糖。
在介绍Golang接收者方法语法糖前,先简单说下Go 语言的指针 (Pointer),大致上理解如下:
变量名前的 & 符号,是取变量的内存地址...[2023/5/17]
Go开源世界主流成熟ORM框架gorm实践分享
@目录概述定义核心功能声明模型与约定gorm.Model字段级权限时间惯例嵌入结构字段标签使用安装数据库链接连接池CRUD 接口创建查询高级查询修改删除原始SQL事务转换分片序列化
概述
定义
GORM 官网地址 https: gorm.io/ 最新版本v1.25.1
GORM 官网文...[2023/5/17]
Golang爬虫框架colly使用浅析
Golang 是一门非常适合编写网络爬虫的语言,它有着高效的并发处理能力和丰富的网络编程库。下面是一个简单的 Golang 网络爬虫示例:
package main
import (
"fmt"
"net/http"
"io/ioutil"
"rege...[2023/5/17]
Golang常用语法糖
1、名字由来
语法糖(Syntactic sugar)的概念是由英国计算机科学家彼得·兰丁提出的,用于表示编程语言中的某种类型的语法,这些语法不会影响功能,但使用起来却很方便。 语法糖,也称糖语法,这些语法不仅不会影响功能,编译后的结果跟不使用语法糖也一样。 语法糖,有可能让代码编写变得简单,也...[2023/5/12]
Golang每日一库之regex
本文地址: https: www.cnblogs.com/zichliang/p/17387436.html
Golang日库合集:https: www.cnblogs.com/zichliang/category/2297320.html
简介
正则表达式是一种用来查询、匹配或替换字符...[2023/5/10]
学习Golang时遇到的似懂非懂的概念
背景??
这是我学习golang的第三天,大致已经掌握了golang的语法,但是着手开发的时候,却遇到了许多问题,例如golang导包机制、golang的项目管理规范、go mod生成project怎么管理依赖的等等。其实这些概念之前也了解过,但是也只是如蜻蜓点水般的了解。正好,现在遇到了这些问...[2023/5/10]
用go设计开发一个自己的轻量级登录库/框架吧用go设计开发一个自己的轻量级登录库/框架吧
用go设计开发一个自己的轻量级登录库/框架吧
几乎每个项目都会有登录,退出等用户功能,而登录又不单仅仅是登录,我们要考虑很多东西。
token该怎么生成?生成什么样的?
是在Cookie存token还是请求头存token?读取的时候怎么读取?
允许同一个账号被多次登录吗?多次登录他们的to...[2023/5/8]
Go函数基础
在Go语言中,函数是一种基本的代码组织方式。函数能够接受输入参数并返回结果。Go语言中的函数有以下特点:
函数定义使用关键字func,后跟函数名、参数列表和返回值类型。
如果函数有返回值,则在函数定义中必须指定返回值的类型。
如果函数有多个返回值,则它们用逗号分隔。
Go语言中的函数可以有任意...[2023/5/8]
基于Golang开发一个轻量级登录库/框架
目录1.Enforcer2.Config3.Adapter4.Context5.Watcher6.Logger 几乎每个项目都会有登录,退出等用户功能,而登录又不单仅仅是登录,我们要考虑很多东西。
token该怎么生成?生成什么样的?
是在Cookie存token还是请求头存token?读取...[2023/5/8]
一文详解Go语言中的Option设计模式
关于什么是设计模式,笔者在这里就不做过多的解释。大家自行百度谷歌就好。下面我们聊聊Option设计模式,这个单词翻译过来就是选项的意思。
它一般都是用在初始化数据的时候使用。
type User struct {
必须初始化的值
Username string
...[2023/5/8]
Golang中深拷贝与浅拷贝详解
目录什么是深拷贝?什么是浅拷贝?示例代码小结 什么是深拷贝?
深拷贝(Deep Copy)是指原对象与拷贝的新对象互相独立,对其中任何一个对象的改动都不会对另外一个对象造成影响。值类型的数据默认是深拷贝,例如array、int、string、struct、float和bool类型。
什么是浅...[2023/5/8]
golang中一种不常见的switch语句写法
最近翻开源代码的时候看到了一种很有意思的switch用法,分享一下。
注意这里讨论的不是typed switch,也就是case语句后面是类型的那种。
直接看代码:
func (s *systemd) Status() (Status, error) {
exitCode, out, e...[2023/5/4]
Go坑:time.After可能导致的内存泄露问题分析Go坑:time.After可能导致的内存泄露问题分析
Go 中 time.After 可能导致的内存泄露
一、Time 包中定时器函数
go v1.20.4
定时函数:NewTicker,NewTimer 和 time.After 介绍
time 包中有 3 个比较常用的定时函数:NewTicker,NewTimer 和 time.Afte...[2023/5/4]
Golang每日一库之bcryptGolang每日一库之bcrypt
官方文档: https: pkg.go.dev/golang.org/x/crypto/bcrypt
前言
之前讲过JWT Token https: www.cnblogs.com/zichliang/p/17303759.html JWT呢是信息是经过数字签名的,因此可以被验证和信任。 ...[2023/4/28]
一文掌握Go语言并发编程必备的Mutex互斥锁
目录1. Mutex 互斥锁的基本概念2. Mutex 互斥锁的基本用法3. Mutex 互斥锁的底层实现3.1 等待队列3.2 锁状态4. Mutex 互斥锁的注意事项4.1 不要将 Mutex 作为函数或方法的参数传递4.2 不要在获取 Mutex 的锁时阻塞太久4.3 不要重复释放 Mutex...[2023/4/28]
一文了解golang 占位符
目录基本常见常用的占位符较少使用的占位符进制和浮点使用占位符指针占位符 xdm ,写 C/C++ 语言的时候有格式控制符,例如 %s , %d , %c , %p 等等
在写 golang 的时候,也是有对应的格式控制符,也叫做占位符,写这个占位符,需要有对应的数据与之对应,不能瞎搞
基本常...[2023/4/24]
Golang实现支付宝沙箱支付的方法步骤
首先我使用的是 gin 作为我的后端框架,我们先设定好几个接口。
func main() {
r := gin.Default()
r.GET("/pay", tools.WebPageAlipay)
r.GET("/return", tools.AliPayNo...[2023/4/21]
详解Go语言各种常见类型的默认值和判空方法
目录起因(解决的问题)基本类型的默认值判断是否初始化(判空)方法1:方式2: 起因(解决的问题)
由于在项目中设计到了类型的判空,所以突然好奇起来,每个类型如果只是声明,而没有初始化,那么默认值是多少?怎么判断它是不是空值?所以去整理了一下
基本类型的默认值
1.常见的基本数据类型有:数...[2023/4/21]
go语言中[]*int和*[]int的具体使用go语言中[]*int和*[]int的具体使用
目录[]*int*[]int []*int是一个指向指针的切片,本质上是切片,只不过切片里面存放的元素是指针;*[]int是一个指向切片的指针,本质上是指针,可以用*来获取切片;
简易记法:从右往左读,最后一个符号是[],说明是切片,倒数第二个符号是*说明切片里是指针;从右往左读,最后一个符号是...[2023/4/21]
GoJs面板绘图模板go.Panel使用示例详解GoJs面板绘图模板go.Panel使用示例详解
目录前言go.Panel的使用go.Panel的类型go.panel.Auto类型go.panel.Grid类型go.panel.Graduated类型go.panel.Horizontal类型go.panel.Position类型go.panel.Table类型go.panel.Spot类型go....[2023/4/19]
GoJs分组绘图模板go.Group使用示例详解
目录前言Group的使用Group的属性handlesDragDropForMembers、isSubGraphExpanded属性isSubGraphExpanded属性ungroupable、wasSubGraphExpanded属性结语 前言
在可视化图形中,很多的节点和连线都有某一个...[2023/4/19]
浅析Go中序列化与反序列化的基本使用
目录什么是序列化与反序列化序列化工作原理在Go中如何序列化一个对象如何格式化序列化后的数据如何给序列化后的xml加上属性如何将xml反序列化为一个对象 什么是序列化与反序列化
这里引入微软对序列化的解释:
序列化是指将对象转换成字节流,从而存储对象或将对象传输到内存、数据库或文件的过程。 它...[2023/4/19]
go语言中time包的各种函数总结
目录前言时间类型Location和time zone时间间隔AddsubBeforeAfter定时器时间格式化时间格式化的时间总结 前言
在我们开发的过程中,每个项目都需要时间这一类的函数,此时,对time这个包的研究深度就显得尤为重要,现在,对time包中的各种函数做出一个总结,加深一些记忆,...[2023/4/17]
go语言程序cpu过高问题排查的方法详解go语言程序cpu过高问题排查的方法详解
目录一、前言二、问题排查过程2.1 通过top查看高cpu的进程pid2.2 通过top查看高cpu的线程tid2.3 通过dlv附加到进程,分析线程/协程cpu过载的堆栈2.4 在dlv中切换到对应高cpu协程,并查看堆栈总结 一、前言
Go程序像C/C++一样,如果开发编码考虑不当,会出现c...[2023/4/17]
Go For Web:踏入Web大门的第一步——Web 的工作方式
前言:
本文作为解决如何通过 Golang 来编写 Web 应用这个问题的前瞻,对 Golang 中的 Web 基础部分进行一个简单的介绍。目前 Go 拥有成熟的 Http 处理包,所以我们去编写一个做任何事情的动态 Web 程序应该是很轻松的,接下来我们就去学习了解一些关于 Web 的相关基...[2023/4/14]
快速搭建一个go语言web后端服务脚手架
快速搭建一个go语言web后端服务脚手架
源码:https: github.com/weloe/go-web-demo
web框架使用gin,数据操作使用gorm,访问控制使用casbin
首先添加一下自定义的middleware
recover_control.go ,统一处理pani...[2023/4/12]
Golang干货分享之利用AST实现AOP功能
简述
本文全是简单的干货,直接让我们知道如何实现一个AOP功能。在这个示例中,我们定义了一个名为 MyStruct 的结构体,它有两个字段和两个方法。然后,我们使用 Golang 的 AST 包来遍历源代码的 AST,并找到名为 MyStruct 的结构...[2023/4/12]
golang pprof 监控系列(3) —— memory,block,mutex 统计原理
golang pprof 监控系列(3) —— memory,block,mutex 统计原理
大家好,我是蓝胖子。
在上一篇文章 golang pprof监控系列(2) —— memory,block,mutex 使用里我讲解了这3种性能指标如何在程序中暴露以及各自监控的范围。也有提到mem...[2023/4/6]
golang的匿名函数和普通函数的区别解析
目录golang的匿名函数和普通函数的区别补充:Golang的匿名函数1.匿名函数介绍2.匿名函数使用方式2.1定义时直接调用2.2将匿名函数赋值给一个变量2.3定义全局匿名函数 golang的匿名函数和普通函数的区别
匿名函数是不具名的函数,可以在不定义函数名的情况下直接使用,通常用于函数内部...[2023/3/29]
一文详解golang延时任务的实现
目录前言你可以收获正文思维导图实现思路步步为营1、数据流2、数据结构3、初始化延时任务对象4、生产者推送任务5、任务推送信号的处理6、生产者删除任务7、任务删除信号的处理8、任务执行信号的处理9、完整代码头脑风暴小结 前言
在实际业务场景中,我们有时候会碰到一些延时的需求:例如,在电商平台,...[2023/3/22]
Golang实现简单http服务器的示例详解
目录一、基本描述二 、具体方法2.1 连接的建立2.2 http请求解析2.3 http请求处理2.4 http请求响应三、完整示例 一、基本描述
完成一个http请求的处理和响应,主要有以下几个步骤:
监听端口建立连接解析http请求处理请求返回http响应
完成上面几个步骤,便能够实现...[2023/3/22]
简单聊聊Go?for?range中容易踩的坑
目录前言1. for+传值2. for+传址3.for+闭包4. for+goroutine总结 前言
为了让大家更好的理解本期知识点,先介绍以下几个知识点:线性结构、非线性结构、循环、迭代、遍历、递归。
线性结构:数组、队列
非线性结构:树、图
循环(loop):最基础的概念,所有...[2023/3/22]
优雅管理Go?Project生命周期优雅管理Go?Project生命周期
目录写在前面 一、什么时候要注意管理应用的生命周期?二、我们是如何做的(1)利用面向对象的方式来管理应用的生命周期(2)处理start(3)处理stop1、什么时候才去Stop?2、Dousheng的应用场景3、代码实现三、什么是优雅关闭(1)没有优雅关闭(2)有了优雅关闭 写在前面&nb...[2023/3/22]
Go Slice扩容的这些坑你踩过哪些
目录前言知识重温案例1:传值+未扩容案例2:传值+扩容案例3:传址+不关心扩容总结 前言
之前对Go语言for循环做了一次踩坑经验分享《Go for range 一不小心就掉坑里了》,大家直呼有用。
今天对切片Slice的append操作也做一次踩坑经验分享,希望对朋友们有所帮助,有用请三连...[2023/3/22]
最近写了一个demo,想看看java和go语言是怎么写的最近写了一个demo,想看看java和go语言是怎么写的
最近写了一个demo:demo的github地址
一. 简单介绍
1. Server端
它是一个WebApi服务,把它当成一个黑盒就行了。
2. MiddleServer端
是重点,它是一个WebApi服务,包含一个GetValues接口和一个Query2接口。
Query2接口是一个简单...[2023/3/17]
浅谈Go语言不提供隐式数字转换的原因
什么是隐式转换
在 C 语言中,隐式数字转换是指在某些情况下,编译器会自动将一个数据类型转换为另一个数据类型,而不需要明确地进行类型转换操作。
以下是一些常见的隐式数字转换规则:
当一个整数类型和一个浮点数类型进行运算时,整数类型会被自动转换为浮点数类型。
当一个表达式中包含两种不同...[2023/3/15]