golang
文章平均质量分 56
golang技术分享
shulu
这个作者很懒,什么都没留下…
展开
-
你是如何写分批处理数据的代码的
这个分批处理框架可以应用于多种需要处理大量数据,但每次只能处理一部分数据的场景。这种框架有助于管理内存使用、优化处理时间,并避免在单个操作中处理所有数据可能导致的性能问题或超时。当您需要将大量数据插入数据库中时,分批处理可以避免一次性加载所有数据到内存中,从而减少内存消耗,并可能提高数据库操作的性能。注意这里是已知总数计算出分批数。原创 2024-08-27 17:22:12 · 320 阅读 · 0 评论 -
什么时候抛异常,什么时候记录错误日志
在Go语言中,是否应该让你的函数返回error,主要取决于该函数在执行过程中是否可能遇到错误情况,并且这些错误情况是否对调用者来说是重要的,需要被知晓和处理的。如果函数在执行过程中可能会因为某些原因失败,而这些失败情况对于调用者来说是有意义的(比如,它们会影响调用者后续的操作或决策),那么你应该让该函数返回error。这样做的好处是,调用者可以根据返回的错误值来决定如何处理失败情况,比如重试操作、记录日志、向用户显示错误信息,或者采取其他适当的恢复措施。原创 2024-08-26 16:08:40 · 441 阅读 · 0 评论 -
想写个延时执行功能,第一步我是打开baidu
是 Go 语言标准库time包中的一个函数,用于创建一个新的定时器(Timer)。我们首先通过一个简单的例子,来展示计时器的使用。在这个例子中,我们将创建一个定时器。我们再举一个稍微复杂一点的例子,假设有一个需求,要求在 5 秒钟内完成某个任务,否则就认为任务失败。这时我们就可以使用NewTimer来实现超时控制。从timer.C取出的是当时的系统时间。原创 2024-08-08 17:14:02 · 390 阅读 · 0 评论 -
还在苦恼接口被流量打爆吗,令牌桶限流器效果出奇的好,还能应对突发流量
本项目令牌桶的实现并没有单独起一个goroutine来添加令牌,是基于时间来实现的,这样令牌桶的更新是懒惰的(即只在需要时更新),不需要额外的goroutine或线程来定期检查并添加令牌,从而减少了系统的开销。原创 2024-08-08 16:19:00 · 863 阅读 · 0 评论 -
一个框架和处理逻辑解耦的例子,我们应该学习这种模式
通过回调函数将具体执行逻辑与遍历过程本身解耦,使得开发者可以在回调函数中实现自定义的逻辑,如过滤特定类型的文件、处理文件内容等。包提供的一个函数,用于遍历指定目录下的所有文件和子目录。WalkDir()里面使用到了递归调用。要实现框架和处理逻辑解耦,可以使用回调函数。是 Go 语言标准库中。原创 2024-08-06 16:04:14 · 238 阅读 · 0 评论 -
在你的代码中试试这种方式实现逻辑定制
回调函数(Callback Functions)是一种在编程中广泛使用的技术,特别是在处理异步操作、事件监听和模块化编程时。回调函数本质上是一个被传递给另一个函数作为参数的函数,它会在某个特定时刻被调用,比如异步操作完成、事件触发或某个条件满足时。在Go语言中,可以将函数直接作为参数传递给另一个函数,并在需要时被调用,这样大大的加强了代码的。原创 2024-08-06 15:24:45 · 536 阅读 · 0 评论 -
go的并发任务如何优雅的实现错误终止
在Go语言中,并发任务通常通过goroutine来实现,而错误处理和任务终止的优雅性则依赖于适当的同步机制和错误传播策略。分析:多个任务可以并发执行,可以使用WaitGroup管理,但是需要返回错误,可以使用errgroup。场景:计算一个目录下所有文件的 MD5 值,任何一个文件都需要正确计算,一旦一个任务出现错误立即返回。使用syc包(sync.WaitGroup)使用通道(Channel)实现这个功能使用到了。原创 2024-08-05 16:58:06 · 420 阅读 · 0 评论 -
如何实现若干子任务一损俱损--浅谈errgroup
errgroup是 Go 语言官方扩展库x/sync中的一个包,它提供了一种方式来并行运行多个 goroutine,并在所有 goroutine 都完成时返回第一个发生的错误(如果有的话)。这对于需要并行处理多个任务并等待它们全部完成,同时需要处理其中任何一个可能发生的错误的场景非常有用。errgroup是 Go 语言中用于管理多个 goroutine 的同步和错误处理的库。使用errgroup可以简化并发代码的编写,使得错误处理更加简洁和一致。原创 2024-08-05 15:49:40 · 467 阅读 · 0 评论 -
填充结构体的切片字段自豪的写了一大坨代码,居然被同事喷毫无美感,试试这个方法,下个被模仿的就是你
这种方式称为链式调用。用来构建对象。原创 2024-08-02 18:40:17 · 170 阅读 · 0 评论 -
辛苦写完功能,总被嫌代码丑陋,试试链式调用构建对象,代码瞬间提升一个档次
这种方式称为链式调用。用来构建对象。原创 2024-08-02 17:37:27 · 353 阅读 · 0 评论 -
go语言time.After()的作用
time.After是一个非常实用的函数,它返回一个用于读取的单向通道(原创 2024-07-25 14:33:46 · 666 阅读 · 0 评论 -
parquet-go的CSVWriter
可以看到这里并没有LIST,也没有MAP。只支持如上一些类型。进入parquet.TypeFromString()分析原因后是CSVWriter不支持LIST。原创 2024-07-12 10:32:22 · 349 阅读 · 0 评论 -
读取mysql数据写入parquet文件
【代码】读取mysql数据写入parquet文件。原创 2024-07-11 12:08:38 · 464 阅读 · 0 评论 -
parquet介绍
Apache Parquet 是一种开源的列式数据文件格式,旨在实现高效的数据存储和检索。它提供高性能压缩和编码方案(encoding schemes)来批量处理复杂数据,并且受到许多编程语言和分析工具的支持。原创 2024-07-11 11:33:21 · 379 阅读 · 0 评论 -
一个parquet-go例子
库在Go语言中写入和读取Parquet文件。使用go读写parquet,使用到了框架。代码示例展示了如何使用。原创 2024-07-08 19:07:45 · 396 阅读 · 0 评论 -
msys2安装make和cmake
这个工具链不包含make、cmake。原创 2024-07-01 18:38:26 · 1017 阅读 · 0 评论 -
MSYS2教程(windows环境下使用linux工具)
MSYS2(Minimal SYStem 2)是一个集成了大量的GNU工具链、工具和库的开源软件包集合。它提供了一个类似于Linux的shell环境,可以在Windows系统中编译和运行许多Linux应用程序和工具。MSYS2基于MinGW-w64平台,提供了一个完整的开发环境,包括GCC编译器、GDB调试器、Make、Git版本控制系统和许多其他开发工具。除了常用的开发库和工具之外,MSYS2还提供了许多专门针对Windows平台的库和工具,方便开发人员进行跨平台开发和移植工作。原创 2024-07-01 17:08:34 · 2632 阅读 · 0 评论 -
go的context总结
Go语言中的context包提供了一种在不同Goroutines之间传递取消信号、超时、截止日期和请求范围值的方法,用于更好地管理并控制并发操作。原创 2024-06-19 15:48:23 · 1063 阅读 · 0 评论 -
go设计模式之建造者设计模式
本案例buildHouse()的顺序是固定的,也就是说 igloo冰屋和 normalHouse普通房屋 的建造顺序是一样的。如果不同的对象有不同的构建顺序。在director中构建。原创 2024-05-09 16:35:19 · 579 阅读 · 0 评论 -
go设计模式之组合设计模式
将对象组合成树形结构以表示“部分-整体”的层次结构。组合设计模式使得用户对单个对象和组合对象的使用具有一致性。参与者Component为组合中的对象声明接口Leaf在组合中表示叶子节点对象。Composite存储子部件。访问和管理子部件。原创 2024-04-29 11:42:33 · 742 阅读 · 0 评论 -
go设计模式之工厂方法模式
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化推迟到其子类。这个接口就是工厂接口,子类就是具体工厂类,而需要创建的对象就是产品对象。客户端代码只需要调用工厂接口的方法,而无需关心具体的产品对象是如何创建的。用于创建对象的过程中将实例化的逻辑封装在一个工厂方法中。把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。在 Go 语言中,工厂方法模式经常被用于对象的创建和初始化。原创 2024-04-24 17:30:12 · 1248 阅读 · 0 评论 -
go设计模式之抽象工厂模式
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建一系列相关或相互依赖对象的家族,而无须指定它们具体的类。原创 2024-04-26 14:24:36 · 1378 阅读 · 0 评论 -
go的option模式
把option定义为函数。函数用于创建一个新的实例。它接受一个或多个Option类型的参数,并使用这些参数来配置的实例。:当需要创建一个对象,并且这个对象有很多可配置的属性时,使用Option模式可以避免构造函数的参数列表变得冗长和难以管理。原创 2024-04-11 15:10:16 · 499 阅读 · 0 评论