go编程技巧
文章平均质量分 59
pony.li
前百度、鹅厂高级后台开发一枚
展开
-
golang 中介者模式
golang 中介者模式文章目录golang 中介者模式前言一、中介者模式是什么?二、示例1. channel 版本2.slice 版本总结前言一、中介者模式是什么?中介者模式是一种行为设计模式,能让你减少对象之间混乱无序的依赖关系。该模式会限制对象之间的直接交互,迫使它们通过一个中介者对象进行合作,将网状依赖变为星状依赖。中介者能使得程序更易于修改和扩展,而且能更方便地对独立的组件进行复用,因为它们不再依赖于很多其他的类。中介者模式与观察者模式之间的区别是,中介者模式解决的是同类或者不同类原创 2022-05-21 19:06:33 · 388 阅读 · 0 评论 -
golang 迭代器模式
golang 迭代器模式文章目录golang 迭代器模式前言一、 什么是迭代器模式二、实例1.班级成员2.班级成员迭代器3.测试程序4.运行结果总结前言一、 什么是迭代器模式迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式 (列表、 栈和树等)的情况下遍历集合中所有的元素。在迭代器的帮助下, 客户端可以用一个迭代器接口以相似的方式遍历不同集合中的元素。这里需要注意的是有两个典型的迭代器接口需要分清楚;一个是集合类实现的可以创建迭代器的工厂方法接口一般命名为Iterable,包含原创 2022-05-21 12:44:21 · 1242 阅读 · 0 评论 -
golang 责任链模式(链式调用)
golang 链式调用文章目录golang 链式调用前言一、什么是「责任链模式」?二、「责任链模式」的具体优势三、代码案例search.goorders.go总结前言我们在写golang 代码的时候经常会出现我想有一个可变参数来确认初始化变量的问题或者针对于按照多种条件查询返回查询结果。我个人比较推崇使用责任链模式(链式调用)的方式来处理,这样的代码维护简单容易理解。一、什么是「责任链模式」?首先把一系列业务按职责划分成不同的对象,接着把这一系列对象构成一个链,然后在这一系列对象中传递请求原创 2022-05-17 18:54:10 · 2514 阅读 · 0 评论 -
golang性能提升方法论
golang性能提升方法论目前使用golang 进行项目开发已经有一年多了,针对很多代码优化有一些心得体会以文字的形式输出做个总结。接口完整性检查另外,我们可以看到,Go 语言的编译器并没有严格检查一个对象是否实现了某接口所有的接口方法,如下面这个示例:type Shape interface { Sides() int Area() int}type Square struct { len int}func (s* Square) Sides() int {原创 2021-07-09 18:32:55 · 525 阅读 · 0 评论 -
golang 使用signal信号打桩
项目场景:golang 使用signal信号进行协程优雅的退出问题描述:现需要为signal 进行单元测试func main() { sigs := make(chan os.Signal, 1) signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGKILL, syscall.SIGQUIT) // xxx 初始化 wg.Add(1) for原创 2021-04-22 14:25:34 · 468 阅读 · 0 评论 -
golang 使用ctx优雅退出程序解决方案
项目场景:项目需要使用信号进行优雅的退出(即主协程在所有协程退出之后再退出)问题描述:该问题是预防协程泄露的解决方案之一,下面demo 使用 signal 信号信道,来监测程序是否被信号中断,使用WaitGroup 来等待子协程全部回收后主协程退出,使用ctx + select来传递子协程的退出信号 解决方案:该问题是预防协程泄露的解决方案之一,下面demo 使用 signal 信号信道,来监测程序是否被信号中断,使用WaitGroup 来等待子协程全部回收后主协程退出,使用ctx + se原创 2021-04-12 14:34:08 · 2030 阅读 · 0 评论 -
一文搞懂go context
https://www.cnblogs.com/netuml/p/9063301.html转载 2021-01-14 16:24:30 · 169 阅读 · 0 评论 -
redis分布式锁
redis分布式锁本文主要介绍使用redis来实现分布式锁文章目录redis分布式锁前言redis事务redis事务原理multi指令的使用watch 指令作用setnx指令(redis的分布式锁)redis解决超卖问题python版本使用redis的 watch + multi + setnx 指令实现golang版本总结前言什么是分布式锁?为什么要使用分布式锁?什么场景下使用分布式锁?如何实现分布式锁? 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。为了保证共享资源的数据原创 2021-01-13 15:08:56 · 640 阅读 · 0 评论 -
快速入门go语言
1.介绍与安装https://mp.weixin.qq.com/s/pKAL0bAEkJanbuOuh-x1aQ2.hello worldhttps://mp.weixin.qq.com/s/BmFAGKOngngC9JhFtuvj4A3.变量https://mp.weixin.qq.com/s/0hl1VDCaseRbKvCRy31_CA4.类型https://mp.weixin.qq.com/s/JJ5-hW_cg8bTSSqe8bTtIw5.常量https://mp.weixin.q转载 2021-01-11 17:05:48 · 1229 阅读 · 0 评论 -
Go语言 json分析
背景Go语言自带的encode/json包提供了对JSON数据格式的编码和解码能力。解码JSON时encode/json包使用UnMarshall或者Decode方法根据开发者提供的存放解码后数据的变量的类型声明来解析JSON并把解码后的数据填充到Go变量里。所以解析JSON的关键其实是如何声明存放解析后数据的变量的类型。Marshal函数执行流程以下为 Go1.12 版本中 json.Marshal 函数的执行流程:在了解了 json.Marshal 函数的执行流程后,再来比较下在 Go1.10原创 2020-05-23 10:24:45 · 303 阅读 · 0 评论 -
linux下c语言、go语言 gdb调试
go语言 gdb调试gdb功能1.启动程序,可以按照开发者的自定义要求运行程序。2.可让被调试的程序在开发者设定的调置的断点处停住。(断点可以是条件表达式)3.当程序被停住时,可以检查此时程序中所发生的事。4.动态的改变当前程序的执行环境。编译Go程序的时候需要注意以下几点1.传递参数-ldflags “-s”,忽略debug的打印信息2.传递-gcflags “-N -l” 参数,这样可以忽略Go内部做的一些优化,聚合变量和函数等优化,这样对于GDB调试来说非常困难,所以在编译的时候加入这原创 2020-05-20 19:40:45 · 560 阅读 · 0 评论