
Golang
文章平均质量分 71
Golang知识点和工业实战技巧
文大侠666
专注安全领域,擅长Go/C++,玩点大数据。
展开
-
golang 1.20正式发布,更好更易更强
预期中的Go 2不会有了,1.20也算是一个小gap,从中可以一窥Go未来的发展之路。对于Go来说,未来保持1.x持续演进和兼容性之外,重点就是让Go性能更优,同时保持大道至简原则,使用尽可能容易,从这两个方面带大家看看你1.20值得关注的特性。原创 2023-02-09 01:05:03 · 5535 阅读 · 0 评论 -
golang新特性arena,带你起飞
golang 1.20引入新特性arena,支持手动分配和释放内存,初步测试性能提升5%-15%甚至更多,真的是起飞了!尽管目前还是实验特性,对于泛型和反射reflect都已支持相当完善,常用场景比如JSON解析/ProtoBuf反序列化都会产生不少提升,本文带你提前全方位解析arena,并给出一些实际优化实践,早学早享受!原创 2023-02-09 00:57:20 · 2906 阅读 · 2 评论 -
golang 协程关闭——谁敢说没踩过坑
生产实践中,go常常遇到未能正确关闭协程而影响程序运行的场景,轻则协程泄漏资源浪费,重则程序崩溃。本文,总结协程关闭的三大原则,结合实际场景让你彻底搞定协程关闭,保证又快又稳!原创 2023-02-02 21:19:12 · 3917 阅读 · 1 评论 -
golang 高手才会的【协程数量控制】套路总结
尽管Goroutine(协程)非常清轻量,但是本身也是占用资源的,过多协程切换也会带来开销,总之物极必反,无限制的开协程的结果只会是Game Over。生产实践中必须考虑控制协程数量,本文带你看看针对不同场景和需求的协程数量控制方式,看看这些姿势你都会了吗?原创 2023-01-20 09:18:21 · 3432 阅读 · 0 评论 -
golang 错误处理channel+error真的香
官方推荐golang中错误处理当做值处理, 既然是值那就可以在channel中传输,本文带你看看golang中channel+error来做异步错误处理有多香,看完本文还会觉得golang的错误处理相比java try catch一点优势都没有吗?原创 2023-01-18 18:01:05 · 2787 阅读 · 1 评论 -
爆肝3天只为Golang 错误处理最佳实践
对于开发者来说,要是不爽Go错误处理,那就看看最佳实践。Go可能引入try catch吗?那可能估计有点难度。本文简单介绍Go为什么选择这样的错误处理和目前常见处理方式,并梳理常见Go错误处理痛点,给出最佳实践,相信看完本文你会觉得Go错误处理好像也没那么糟糕,甚至好像还挺自然。原创 2023-01-14 22:21:10 · 1365 阅读 · 0 评论 -
别等大佬了——用TryLock实现可重入锁
同样是大佬抗拒的痛点,Go 1.18 TryLock有了,可重入锁还会远吗?TryLock没啥好说的,简单介绍下,再看看TryLock对优化可重入锁实现的作用,自己动手,丰衣足食,别等大佬了,人生有多少个9年!原创 2023-01-11 09:56:18 · 728 阅读 · 0 评论 -
golang 为什么需要context
当前go的各种源码中应该都可以看到context的使用,Context是golang 1.7的引入的核心结构,本质是为了处理go的并发控制问题。本文主要带大家深入理解context如何使用,为什么需要context和context设计原理。原创 2023-01-09 09:41:30 · 547 阅读 · 0 评论 -
快来!2023面试必问的Go泛型解析
go1.18引入泛型,本文带你10分钟掌握Go泛型,示例说明,快速掌握。原创 2022-11-24 09:15:24 · 640 阅读 · 0 评论 -
go模式-责任链
所谓责任链也就是一组任务执行,每个任务输入是上一个任务输出,每个任务输出是下个任务输入,每个任务完成自己负责部分,相当于一个管道串接起来完成任务,因此也叫pipe filter ,常用于任务编排。原创 2021-10-07 16:54:18 · 468 阅读 · 2 评论 -
go模式-生产者消费者
常见的生产者消费者,就是多个生产者并发生产数据,多个消费者并发消费数据。在golang中很简单,生产者生产全部输入到channel中,消费者消费全部从channel中读取,天然具有并发安全性。原创 2021-10-07 16:37:12 · 1153 阅读 · 0 评论 -
go并发-对象池实现
对象池,简单来说就是维持一个并发访问的池子,需要对象时从池子取,用完了再还回去。在golang中通过维持一个带缓冲channel很容易完成这一功能,天然具有并发访问安全性。原创 2021-10-07 16:14:12 · 306 阅读 · 0 评论 -
go并发-常见任务控制
1.只运行一次2.等待任意任务完成3.等待全部任务完成原创 2021-10-07 15:59:22 · 294 阅读 · 0 评论 -
go并发-任务启动和取消
并发编程中,常会遇到任务启动后取消控制问题,这里两种方法实现原创 2021-10-07 15:47:26 · 429 阅读 · 0 评论 -
go并发-异步和超时控制
go 中可如下实现异步Future功能,异步任务AsyncService返回的是获取数据的管道chan string而不是直接的string调用后立即返回。通过管道控制,可轻松实现异步和超时控制。原创 2021-10-07 15:31:57 · 1058 阅读 · 0 评论 -
go reflect常见应用
借助golang reflect可以使程序更加灵活和简洁,本文介绍常用的两个场景,抛砖引玉,供参考。原创 2021-10-07 12:07:46 · 420 阅读 · 0 评论 -
go reflect详解
本文主要讲解reflect基础和常用方法,下文会讲解常见的应用场景。原创 2021-10-07 11:42:08 · 1071 阅读 · 0 评论 -
go unsafe常见应用
go 本身是类似java一样,底层运行虚拟机,整个程序处于托管状态(GC等),要想和底层打交道需要用到unsafe模块,unsafe也常用于性能提升和程序灵活处理场景,本文介绍unsafe常用的几个场景。原创 2021-10-07 10:47:46 · 767 阅读 · 0 评论 -
go 接口/错误处理 知识点
接口面向对象3大特性,封装/继承/多态,封装采用结构体完成,继承使用组合的方式完成,而接口使用的是所谓的鸭子模型(Duck Type)。也就是说不像c++/java中,实现接口必须继承实现,只需要实现了接口定义的一组方法,那么就默认为实现了该接口。如下,利用接口实现多态,注意new后传入对象指针// --- interfacetype Animal interface { sayHello(words string)}type Peopple struct {}func原创 2021-08-02 11:41:55 · 637 阅读 · 0 评论 -
go 类型/表达式/函数 知识点
最近准备换工作,又过一遍常规go基础,发现还是很多细节需要细扣下,顺便分享给需要的朋友参考,既是自我提升,也能加快开发效率。基础用好多值传递和常量自增定义,很多时候事半功倍。const ( east = iota + 1 south west earth)const ( On = 1 << iota Off Unknown)func TestBase(t *testing.T) { // 支持多值传递 a := 1 b := 2 a, b =.原创 2021-03-07 12:29:55 · 261 阅读 · 0 评论 -
go jenkins自动编译部署
jenkins安装jenkins配置go插件安装编译配置参考文档jenkins安装安装包下载位置,可以直接安装对应系统安装包,也可以使用通用安装包.war文件,这里使用war包安装。单独运行Jenkins可以作为一个独立的应用程序在其自己的流程中运行, 内置Java servlet 容器/应用程序服务器(Jetty)。运行命令java -jar jenkins.war...原创 2019-04-21 13:09:05 · 2597 阅读 · 0 评论 -
go 命令参数的解析
flag自定义flag完全自定义解析命令参数的解析是常用功能,go中借助flag包来完成这一功能。flagflag使用很简单,包括如下3步:预声明参数变量绑定参数解析和调整帮助显示参数解析,按照预定义方式绑定到变量//预声明变量var name string//绑定参数变量func init() { flag.StringVar(&name, "n...原创 2019-03-23 13:58:30 · 2620 阅读 · 0 评论 -
go 包管理前世今生
GOPATH- 多个工作区问题- 相同后缀路径导入问题dep包管理go modules包管理按照历史来说,目前go1.12为止,官方有三种包管理方式,分别是:原始的GOPATH1.9开始支持的go dep1.11开始支持的go modules三种方式并不是后者淘汰前者,就目前来看各有各的使用场景,新的兼容旧的方式,如果新学习的话建议直接使用go modules。GO...原创 2019-03-23 13:54:16 · 630 阅读 · 1 评论 -
go并发编程基础
go被誉为互联网的C语言,它的同步其实还是基于传统语言,但是它的优势在于语言层面实现了协程支持,goroutine和channel组成的CSP模型,大大减少了并发编程开发难度,简单记下心得供有需要朋友参考。go中开辟新线程使用go 关键字即可,同步方法分为传统方法和基于通道(channel)的方法,通道包括无缓冲和有缓冲通道,这些同步方法结合保证了go并发编程的灵活性。 1.传统方法...原创 2018-08-25 20:49:10 · 327 阅读 · 0 评论 -
go类型相关常见问题
1.如何判断变量类型有时候需要根据变量类型动态判断变量类型,可以有如下三种方法:func getType( i interface{}){ switch i.(type) { case int32: fmt.Println("int32 variable") case int64: fmt.Println("int64 variable") case int: fmt...原创 2018-08-17 19:39:39 · 351 阅读 · 0 评论 -
go语言常见坑
学习go语言有段时间了,这门语言确实极具生产力,虽然都说简单,但是由于编程和常见的OO语言套路差别有点大,很多地方还是需要调整对已有语言的认识,这里记下遇到的一些坑,供有需要的朋友查阅。1.main包的特殊性传统语言中对主入口的要求是main函数,如c++/java等,只需要保证这点即可,但是在go中还需要保证main包的唯一性。如下,在一个main包定义如下函数package ...原创 2018-08-16 16:45:52 · 1918 阅读 · 1 评论