golang
文章平均质量分 74
golang 学习,日常工作总结
CarlosKeFeng
这个作者很懒,什么都没留下…
展开
-
Golang中的panic
前言Golang中当程序发生致命异常时(比如数组下标越界,注意这里的异常并不是error),Golang程序会panic(运行时恐慌)。当程序发生panic时,程序会执行当前栈中的defer 函数列表。然后打印引发panic的具体信息,最后进程退出,本篇文章我们一起探讨Golang中的panic以及如何利用defer 和 recover 来恢复这种致命的异常分析造成panic堆栈信息func main() { f1() fmt.Println("main func end")}func f1原创 2022-04-10 15:09:16 · 6773 阅读 · 0 评论 -
Golang中的channel
前言先来看看Rob Pick关于Golang并发的哲学不要通过共享内存来通信,而应该通过通信来共享内存下面我仅以我个人观点来描述我对这句话的理解:Golang不同于其他语言使用线程(比如Java)实现并发处理,它使用了更为轻量级的goroutine(协程来处理并发)。 \要理解「不要通过共享内存来通信」这句话,我们以Java中的并发举例 Java中多线程来并发操作一块临界资源时,本质上就是通过操作的一块共享资源,多线程之间通过这块共享资源进行通信。多线程之间需要依靠同步锁、信号量等同步机制来原创 2022-04-07 14:58:08 · 752 阅读 · 0 评论 -
Golang中的map
前言和大部分编程语言一样,Golang也提供了一种数据类型用来存储键值对(hash)数据,这篇文章我们一起来探讨Golang中map的使用方法以及常见的注意事项map的底层结构我们通过以下代码来看下,当我们创建一个map,并往map中添加键值对时,底层都做了些啥func main() { // 声明一个map m1 m1 := make(map[string]int) // 添加键值对 a:1 m1["a"] =1}map会初始时,内部有一个hash表,该表中有一定数量的hash桶。原创 2022-04-06 20:33:45 · 880 阅读 · 0 评论 -
Golang数组和切片
前言Golang中的「数组」和「切片」都是存储同一数据类型的容器,只不过Golang中的数组长度是固定的,而切片的长度是可变化的。我们日常应用中还是切片的占比还是比较大的,本篇文章我们来详细探讨下这两种数据类型Golang数组Golang中的数组长度是固定的,并且在声明时就必须指定他的长度数组声明func main() { // 声明数组 var a1 [2]string // 声明时并初始化数组 // 这里我声明了,string类型的数组a,他的长度为2 a2 := [2]string原创 2022-04-06 18:35:57 · 3123 阅读 · 1 评论 -
基于SAML 2.0对接阿里云的SSO(单点登录)
对接阿里云SSO原创 2022-01-25 13:01:07 · 5044 阅读 · 17 评论 -
redis的incr+expire的坑
使用redis的incr+expire做请求次数限制的问题原创 2022-01-14 11:46:10 · 976 阅读 · 0 评论 -
gRPC的错误处理实践
基于石墨文档基于K8S的Go微服务实践,我们这次把该内容中的错误码做了一个详细的介绍。0 背景我们内部系统全部统一采用gRPC协议和protobuf编解码。统一的好处在于不需要在做任何协议、编解码转换,这样就可以使我们所有业务采用同一个protobuf仓库,基于CI/CD工具实现许多自动化功能。我们要求所有服务提供者提前在独立的路径下定义好接口和错误码的protobuf文件,然后提交到GitLab,我们通过GitLab CI的check阶段对变更的protobuf文件做format、lint、bre转载 2021-11-17 21:53:22 · 3449 阅读 · 1 评论 -
Mac(M1)使用confluent-kafka-go
1.准备环境安装pkg-config,librdkafka,opensslbrew install pkg-config brew install librdkafkabrew install openssl2.golang中配置运行环境PKG_CONFIG_PATH=/opt/homebrew/opt/openssl@1.1/lib/pkgconfig-tags dynamic3.debug运行原创 2021-10-21 11:58:13 · 1285 阅读 · 2 评论 -
go项目接入华为严选模板代码
背景公司为了扩展销售渠道,将saas产品上架到华为严选。作为服务提供商来说需要开发对应的回调接口提供给华为,华为根据新购,续费等事件来回调服务提供商接入前准备参见官方文档:https://support.huaweicloud.com/accessg-marketplace/zh-cn_topic_0070649060.html模板代码语言:golangweb框架: https://github.com/gotomicro/ego该框架基于斗鱼的微服务框架jupiter演进而来,如何使用原创 2021-10-13 20:19:20 · 257 阅读 · 0 评论 -
HTTP接口设计规范
简介RepresentationalStateTransfer(REST),一组描述资源状态转换的约束条件和原则,满足这些约束条件和原则的设计或应用称之为RESTful。本文仅仅涉及HTTP中的REST。遵守REST的意义在于,除了能统一URI⻛格外,主要是为了:能充分利用HTTP协议的语义,无需重复自定义一些不够通用的自定义header或者 body格式。遵从HTTP相关规范,对推进其他服务治理的中间件有积极意义,如网关/API管理等概念资源(Resou原创 2021-06-22 20:44:48 · 3466 阅读 · 0 评论 -
gorm升级V1至V2
Count() 入参类型变化V1 : Count(int)V2: Count(int64)Limt()\Offset()入参类型由 interface{} -> intOrderv1: 参数为空字符串会被忽略,从而正常执行: Order("") 生成的sql中不带order byv2: 空字符串也会被生成 order by 语句,从而导致 sql 执行失败。需要自行判空Find在 V1 版本中, Find(&User{}) 当记录不存在时会返回 ErrRecordNotFou原创 2021-04-28 18:39:42 · 2300 阅读 · 1 评论 -
使用sync.map做内存缓存
背景实际业务场景中有些需求对于数据实时性要求不高,但是对于吞吐量和响应有着极高的要求,这个时候我们可以建立多级缓存来解决此类问题,本篇文章我们讨论的是内存缓存(golang)来实现实现方案想到内存缓存,想必大家第一个想到的是golang中的map+mutex、sync.map的方式来实现.对于读多写少的场景,一般建议大家用sync.map来实现(具体场景的性能测试如下)引用自: https://blog.csdn.net/wyg_031113/article/details/106282340原创 2021-04-21 13:52:23 · 1194 阅读 · 0 评论 -
go学习笔记
1.time.NewTicket 疑问点记录:package mainimport ( "fmt" "time")func main() { ticker := time.NewTicker(time.Second) intChan := make(chan int, 1) go func() { for _ = range ticker.C { select { case intChan <- 1: case intChan <- 2: ca原创 2020-08-16 15:10:52 · 193 阅读 · 0 评论 -
对GO切片的无知,我所踩下的坑
需求背景:从切片中删除指定元素废话不多说直接上代码package mainimport ( "fmt")var datas []intvar filter intfunc init() { datas = append(datas, 11, 22, 33, 44) filter = 11}func main() { filterData(datas, filter) fmt.Println("datas:", datas)}// 从recordedDatas 删除f原创 2020-06-19 21:36:09 · 234 阅读 · 0 评论 -
windows 安装 go lint 踩坑记录
go lint 介绍是什么Golint 是一个源码检测工具用于检测代码规范Golint 不同于gofmt, Gofmt用于代码格式化能干啥package注释 必须按照 “Package xxx 开头”package命名 不能有大写字母、下划线等特殊字符struct、interface等注释 必须按照指定格式开头struct、interface等命名变量注释、命名函数注释、命名各种语法规范校验等踩坑记录笔者也是刚接触golang 不久 然后就照着网上一顿骚操作,发现解决不了问原创 2020-05-30 12:59:43 · 1308 阅读 · 0 评论 -
protoc-gen-go的坑
@protoc-gen-go的坑问题背景最近从java转go学习grpc过程中,由于要使用用protoc和protoc-gen-go,所以在安装相关grpc环境中出现了一些坑,这里给各位刚入门的朋友分享下,避免踩坑安装protoc-gen-go1.go get -u github.com/golang/protobuf/protoc-gen-go然后就出现了一堆错误package google.golang.org/protobuf/compiler/protogen: unrecognize原创 2020-05-10 15:49:42 · 3075 阅读 · 0 评论 -
go-echo实现对gprc的代理
前言目前公司框架准备开源自研的go微服务框架,而HTTP模块则是用的业界比较成熟的echo框架,考虑到后期框架的使用者会使用HTTP协议访问GRPC服务,本文章会详细对这块的设计以及实现做详细说明.如何实现入口: // 正常往ECHO中注册路由 echo.GET("/ping", func(ctx echo.Context) error { return ctx.JSON(200, "pong") }) echo.GET("/hehe", func(context echo.Con原创 2020-05-19 22:46:38 · 531 阅读 · 0 评论