戴国进
往后余生,专注人工智能领域!!!
展开
-
gcc: error: unrecognized command line option ‘-mthreads‘; did you mean ‘-pthread‘
在ubuntu操作系统上执行上面的编译命令却不会报错,但是编译出的wx.exe可执行文件却无法运行。经过分析,是因为启用了编译约束;最终通过开启 golang的 cgo 和运行编译命令前指明。编译出的wx.exe成功在windows 11操作系统上成功运行。原创 2025-03-18 11:03:35 · 60 阅读 · 0 评论 -
详解golang的Gengine规则引擎
Gengine是一款基于golang和AST(抽象语法树)开发的规则引擎, Gengine支持的语法是一种自定义的DSL, Gengine通过内置的解释器对规则文件进行解析,构建规则模型,进行相应的规则计算和数据处理。Gengine于2020年7月由哔哩哔哩(bilibili.com)授权开源。Gengine现已应用于B站风控系统、流量投放系统、AB测试、推荐平台系统等多个业务场景。官网上给出的Gengine相比于Java领域的著名规则引擎drools优势如下:对比droolsgengine。原创 2025-02-24 20:46:57 · 254 阅读 · 0 评论 -
golang 报错 `tls: failed to verify certificate: x509: certificate signed by unknown authority`
报错的位置是 golang 的 http client,并未有很特殊的配置。原创 2024-11-28 16:35:43 · 965 阅读 · 0 评论 -
gin 通过 OpenTelemetry 实现链路追踪
OpenTelemetry是一组与供应商无关的开源工具、API 和 SDK,用于检测应用程序以创建和管理遥测数据(日志、指标和跟踪)。它旨在使遥测数据(日志、指标和跟踪)成为云原生软件应用程序的内置功能。然后将遥测数据发送到可观察性工具进行存储和可视化。OpenTelemetry 库检测应用程序代码以生成遥测数据,然后将其发送到可观察性工具进行存储和可视化OpenTelemetry 库检测应用程序代码以生成遥测数据,然后将其发送到可观察性工具进行存储和可视化。原创 2024-08-30 21:54:54 · 1425 阅读 · 0 评论 -
goLang 通过 Select + Channels 实现定时任务与调度
time 包 在与 channel 结合时提供了很多有用的功能,其中 time.Ticker 结构体能够处理定时事件,它会定期在指定 channel 上发送时间值。在这篇文章中,我们深入探讨了如何使用 Go 语言中的 time 包与 channel 结合来处理定时事件和任务调度。通过 time.Ticker 结构体的周期性触发和 select 语句的多路复用能力,我们可以创建高效且响应迅速的定时任务处理系统。Ticker 对于在 goroutine 中周期性执行任务(如日志记录或计算)非常方便。原创 2024-07-15 16:23:07 · 813 阅读 · 0 评论 -
Zeebe 微服务编排引擎 入门
公司的端到端工作流几乎总是跨越多个微服务。例如,在电子商务公司中,“客户订单”工作流可能涉及支付微服务、库存微服务、配送微服务等等。这些跨微服务工作流是公司的核心收入驱动因素,但它们很少被建模和监控;通常,通过不同微服务的事件流仅在代码中隐含地表示。如果是这样,我们如何确保工作流的可见性并提供状态和错误监视?我们如何保证整个流始终是完整的,即使单个微服务失败?或者我们如何至少认识到一个流程被卡住了所以我们可以进去并修复它?原创 2023-11-02 18:10:22 · 909 阅读 · 0 评论 -
GitLab 私有 Go Modules 的搭建配置
将 GitLab Access Token 写入到。配置 GitLab Access Token。就是上一步生成的 token。是GitLab 用户名,原创 2023-07-17 09:31:58 · 619 阅读 · 0 评论 -
详解 goLang 的 channel
下面表格中的内容是 Go 语言中channel数据类型的使用规则,相信读者已经可以熟练掌握,本文主要分析channel的内部实现中的数据结构和算法,所以相关的基础概念会直接跳过, 希望读者阅读完本文后,可以深入理解表格中的各类规则,从应用层代码到底层实现,能够知其然并知其所以然。原创 2023-07-05 12:42:08 · 430 阅读 · 0 评论 -
goLang 使用 WebAssembly
今天我们快速的对 WebAssembly 进行了背景了解、Go 快速上手、扩展场景了解等。虽然 WebAssembly 是一个新轮子,也号称可以借助 WASI 集成和被集成。但实际上现在各语言对 WebAssembly 的支持程度都不一样,像 Go 官方自己提供的标准库就维护的不怎么样,WASI 的 issues 也没有继续推进。甚至在其他语言的互通,现在仍然有着或多或少会导致阻塞无法应用的问题。可能,还需要再过个 3~5 年?但如此多语言的库维护,能否长久的迭代和维护。也是一个更大的问题。原创 2023-04-28 15:58:46 · 731 阅读 · 0 评论 -
cgo 将goLang函数作为回调函数传递给C的简单示例
【代码】cgo 将goLang函数作为回调函数传递给C的简单示例。原创 2023-06-03 19:43:16 · 690 阅读 · 0 评论 -
Golang 使用Gin框架实现 SSE 服务端
在重试字段中,服务器可以发送超时(以毫秒为单位),之后客户端应在连接中断时自动重新连接。, 具有 W3C 标准化的网络协议和 EventSource 客户端接口,作为 HTML5 标准套件的一部分。在事件字段中,服务器可以发送事件类型。服务器可以在同一个订阅中发送不同类型的事件,也可以不发送任何类型的事件。尽管 SSE 旨在将事件从服务器发送到客户端,但可以使用 GET 查询参数将数据从客户端传递到服务器。要处理连接的建立,它应该订阅 onopen 事件处理程序。在数据字段中,服务器可以发送事件数据。原创 2023-05-26 11:52:20 · 3292 阅读 · 0 评论 -
Golang 中通过 cgo 调用 C++ 的动态库的功能封装
下面将通过一个示例程序,演示如何在 Golang 中通过 cgo 调用 C++。Golang 中通过 cgo 调用 C++ 的动态库的功能封装。src.cpp 源码。原创 2023-05-17 21:19:16 · 1163 阅读 · 0 评论 -
Go语言实现对称加密算法AES、DES、3DES和非对称加密算法RSA
加密和解密使用的是同一个密钥,数据私密性双向保证,也就是加密和解密都不能泄露密码。原创 2023-03-31 10:54:22 · 789 阅读 · 0 评论 -
goLang Mutex用法案例详解
Golang以其并发性Goroutines而闻名。不仅是并发,还有更多。因此,在这种情况下,我们必须确保多个goroutines不应该同时试图修改资源,从而导致冲突。为了确保资源一次只能被一个goroutine访问,我们可以使用一个叫做sync.Mutex的东西。原创 2023-02-17 21:45:30 · 702 阅读 · 0 评论 -
GoLang fmt常用打印方法及占位符介绍
也是比较常用的打印方法,将操作值按照占位符代表的格式进行转换并替换。函数返回打印的字节数数量和错误信息。函数返回打印的字节数数量和错误信息。函数返回打印的字节数数量和错误信息。函数返回打印的字节数数量和错误信息。函数返回一个字节切片。函数返回一个字节切片。函数返回新的字符串。函数返回新的字符串。原创 2023-01-04 21:20:32 · 635 阅读 · 0 评论 -
使用 OpenTelemetry 零代码修改接收 SkyWalking 追踪数据
其中,在OpenTelemetry协议里,Span在所有Trace中都是唯一的,而在 SkyWalking中,Span仅在每个Segment里是唯一的,这说明要通过 SegmentId与SpanId 结合才能在SkyWalking中对Span做唯一标识,并转换为OpenTelemetry的SpanId。另一方面,基于Dapper论文的思想,国内也有SkyWalking开源项目实现了分布式追踪,由于探针的无侵入性,SkyWalking获得了大量的用户,并且有越来越多的贡献者推动着它的高速迭代。原创 2022-12-20 22:19:17 · 744 阅读 · 0 评论 -
goLang 匿名struct 的用法
go语言匿名struct的基本用例。原创 2022-12-20 12:19:32 · 546 阅读 · 0 评论 -
GoLang HTTP和REST客户端库: resty
Resty提供了易于使用的动态请求URL路径参数。可以在客户端和请求级别设置Params。客户端级参数值可以在请求级别重写。实现RedirectPolicy接口并在resty客户端注册它。以上设置将导致resty重试请求返回非nil错误最多3次,每次尝试后延迟都会增加。使用ginko模拟restyhttp请求的更详细的例子可以在这里找到。开始发布Resty版本和更高版本的Resty。Resty提供了中间件处理请求和响应的能力。它比回调方法更灵活。Resty在每次尝试后使用backoff来增加重试间隔。原创 2022-11-11 20:22:22 · 800 阅读 · 0 评论 -
运行 Go get 报错 terminal prompts disabled
环境设置 GIT_TERMINAL_PROMPT=1。原创 2022-10-28 15:55:16 · 2069 阅读 · 0 评论 -
Uber 公司推出的 GoLang 编程规范
如果不是lib库,就需要增加所需的上下文信息,不然就会出现 "connection refused" 这样非常 模糊的错误,理论上应该添加上下文,来得到这样的报错信息:"call service foo: connection refused"。最好的情况下,编译器会直接报错,最糟糕的情况下,这样的代码会引入难以排查的bug。如果结构体中包含mutex,在使用结构体的指针时,mutex应该是结构体的非指针字段,也不要把mutex内嵌到结构体中,即使结构体是非导出类型。尽管编写内嵌类型已实现的方法是乏味的。原创 2022-10-24 21:58:21 · 1637 阅读 · 0 评论 -
Go 高性能编程技法
在 Linux 系统中,标准输出也可以视为文件,内核(Kernel)利用文件描述符(File Descriptor)来访问文件,标准输出的文件描述符为 1,错误输出文件描述符为 2,标准输入的文件描述符为 0。频繁地分配、回收内存会给 GC 带来一定的负担,严重的时候会引起 CPU 的毛刺,而 sync.Pool 可以将暂时不用的对象缓存起来,待下次需要的时候直接使用,不用再次经过内存分配,复用对象的内存,减轻 GC 的压力,提升系统的性能。可以预见的是,随着分片粒度地变小,性能差距会越来越大。原创 2022-10-24 21:09:11 · 534 阅读 · 0 评论 -
Golang任务队列machinery使用与源码剖析(二)
这时候我们回头看一下Signature的参数中有一个Immutable,chain任务会根据每一个任务的Immutable参数的数值来决定是否帮我们将上一个任务的返回值通过参数传递给chain中的下一个任务,如果immutable为true,那么参数将不会被传递下去,实现该部分的代码在任务执行成功的taskSucceeded()函数中。然而,做技术的一般都是有强迫症的,两个配置文件存在于一个项目的确是一个十分ugly的现象,为了解决这一问题,machinery的环境变量配置模式的作用就体现出来了。转载 2022-10-21 21:22:44 · 1309 阅读 · 0 评论 -
Golang任务队列machinery使用与源码剖析(一)
当用户的一次请求事件发生,可能是某种数据的重复数查询,抑或是某批人群的覆盖率统计,展现到用户的是几行数字,但在透视到后端逻辑中,简单的这可能是一次mysql的联表查询或者elasticsearch的聚合,但更多情况下,是附带了一系列复杂的数据交互或者耗时的逻辑计算。GetPendingTasks()函数,更多的可以理解为,是作者提供的“接口糖”,方便离线的对任务队列中的任务进行查看,当然,machinery中使用的几种第三方队列作为Broker,基本上都是支持这类数据的单独查看的。转载 2022-10-21 20:47:01 · 2010 阅读 · 0 评论 -
goLang sqlboiler ORM工具的使用
sqlboiler ORM工具的使用原创 2022-09-08 21:24:11 · 533 阅读 · 0 评论 -
goLang context组件学习笔记
综上所述,Context的主要功能就是用于控制协程退出和附加链路信息。核心实现的结构体有4个,最复杂的是cancelCtx,最常用的是cancelCtx和valueCtx。整体呈树状结构,父子节点间同步取消信号。原创 2022-08-29 20:56:30 · 298 阅读 · 0 评论 -
goLang protobuf介绍和使用
是谷歌内部的混合语言数据标准。是一种与语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML(应该只是传输数据的功能和数据结构化的类比)。序列化:是将对象的状态信息转换为可以存储或传输的形式的过程,序列化后的数据要确保能通过反序列化后还原出来Protobuf支持Java, C++, Python等多种语言,支持多个平台。原创 2022-08-24 17:43:36 · 760 阅读 · 0 评论 -
goLang 协程池
如果此时 P 的队列为空,即没有其他 G 可以执行, M 会先尝试从全局队列寻找 G 来执行,如果全局队列为空,它会随机挑选另外一个 P,从它的队列里拿走一半 G 到自己的队列中执行。P 的数量在默认情况下,会被设定为 CPU 的核数。Go 程的调度模型是 G-P-M,通过 P(Processor,逻辑处理器)将 G(Goroutine,用户线程)与 M(Machine,系统线程)解耦,我们可以随意开启多个 G 交由调度器分配到 P,再通过 P 将 G 交由 M 来完成执行。(1)Go 程数量固定。....转载 2022-08-15 21:35:21 · 712 阅读 · 0 评论 -
goLang 实现限制 服务器文件上传和下载的速度
您可以使用不同的存储桶实现来提供所需的行为。原创 2022-08-12 15:54:52 · 1431 阅读 · 0 评论 -
Golang 16进制大数转换成10进制,解决 value out of range 报错
因为unit最大值为,所以无法完成转换。原创 2022-08-06 18:41:09 · 2232 阅读 · 0 评论 -
goLang 时间处理
整体而言,time库提供的时间处理函数和方法,基本满足我们的使用需求。有意思的是,Go时间格式化转换必须采用Go诞生时间,确实有够自恋。原创 2022-08-01 20:22:06 · 701 阅读 · 0 评论 -
goLang 操作文件
本文归根结底是介绍os、io、bufio这些包如何操作文件,因为Go语言操作提供了太多了方法,借着本文全都介绍出来,在使用的时候可以很方便的当作文档查询,如果你问用什么方法操作文件是最优的方法,这个我也没法回答你,需要根据具体场景分析的,如果这些方法你都知道了,在写一个benchmark对比一下就可以了,实践才是检验真理的唯一标准。https。......转载 2022-08-01 20:08:44 · 490 阅读 · 0 评论 -
goLang 实现并发切片上传和下载文件
将大文件进行分片,定义分片规格为1M,比如有5M大小的文件,那么就会分成文件名为0,1,2,3,4,5这6个文件,上传到服务端后,服务端会创建一个uuid的文件夹用来保存这5个分片文件,并且会记录一个元数据文件,里面保存着该元数据文件对应哪个目录,文件切片大小、文件大小和文件md5等原信息。(7)开始读文件,如果是续传的,还可以根据续传情况进行偏移量偏移,跳过指定的切片段,读时每次只读1M,然后判断该切片是否已被上传过,如果上传过则无须再上传,可直接跳过,否则就创建一个goroutine进行异步上传;...转载 2022-07-19 14:59:41 · 3341 阅读 · 0 评论 -
goLang 三种方法 - 遍历目录获取文件列表
Hello大家好呀,这次分享的内容是如何使用Go在文件系统中获取到文件夹中的所有文件列表。本文将会列举三种方法。原创 2022-07-18 22:01:38 · 3783 阅读 · 0 评论 -
goLang 大文件分割与合并
大文件上传到服务器,往往需要将文件按一定大小切割成小文件,将小文件上传到服务器后,再合并成原来的文件;不过经过实测,使用该方式操作视频文件,有一定的概率合并后的视频文件被损坏,无法播放。............原创 2022-07-18 21:14:00 · 2040 阅读 · 0 评论 -
golang 单个、多个分隔符和使用正则表达式 - 分割字符串
参考:strings package - strings - Go Packageshttps://pkg.go.dev/strings使用Go中的正则表达式拆分字符串 - 或代码使用Go中的正则表达式拆分字符串 - 我是Go的新手,到目前为止一直很享受。我正在尝试找到一种使用正则表达式而不是字符串来拆分字符串的好方法。谢谢http://nsf.github.com/go/strings.html?f:Split! https://www.orcode.com/question/1105160_k6f原创 2022-06-30 12:27:43 · 1650 阅读 · 0 评论 -
Golang 1.18 中泛型的使用
导语 | Golang在2022-03-15发布了V1.18正式版,里面包含了对泛型的支持,那么最新版本的泛型如何使用呢?有哪些坑呢?本文全面且详细的带你了解泛型在Golang中的使用。一、什么是泛型说起泛型这个词,可能有些人比较陌生,特别是PHP或者JavaScript这类弱语言的开发者,尤其陌生。因为在这些弱语言中,语法本身就是支持不同类型的变量调用的。可以说无形之中早已把泛型融入语言的DNA中了,以至于开发者习以为常了。举个PHP中的泛型的例子:我们定义了一个sum函数,参数是传入2个变量,返回值是2转载 2022-06-24 14:27:37 · 1770 阅读 · 0 评论 -
GoLang 的 bufio.NewScanner 按行读取文件的坑
首先从一个日志分析的Go程序说起,基本功能就是一行一行读取数据并处理。代码大体是这样的:func main() { scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { line := scanner.Text() if err := deal(line); err != nil { log.Println(line) } }}因为数据是用h转载 2022-06-24 14:21:32 · 4535 阅读 · 0 评论 -
GoLang 文件监听库 fsnotify
上一篇文章Go 每日一库之 viper中,我们介绍了 viper 可以监听文件修改进而自动重新加载。其内部使用的就是这个库,它是跨平台的。今天我们就来介绍一下它。先安装:后使用:的使用比较简单:上面示例中,我们在另一个 goroutine 中循环读取发生的事件及错误,然后输出它们。编译、运行程序。在当前目录创建一个,然后重命名为文件,输入内容,然后删除它。观察控制台输出:其实,重命名时会产生两个事件,一个是原文件的事件,一个是新文件的事件。注意,使用了操作系统接口,监听器中保存了系统资源转载 2022-06-06 20:54:03 · 1770 阅读 · 0 评论 -
Go Error处理最佳实践
错误处理一直以一是编程必需要面对的问题,错误处理如果做的好的话,代码的稳定性会很好。不同的语言有不同的出现处理的方式。Go语言也一样,在本篇文章中,我们来讨论一下Go语言的错误处理方式。一、错误与异常(一)Error错误是程序中可能出现的问题,比如连接数据库失败,连接网络失败等,在程序设计中,错误处理是业务的一部分。Go内建一个error接口类型作为go的错误标准处理http://golang.org/pkg/builtin/#error// 接口定义type error inte原创 2022-05-14 20:59:52 · 307 阅读 · 0 评论 -
使用 goleak 工具在测试中发现goroutine泄漏
前言众所周知,gorourtine的设计是Go语言并发实现的核心组成部分,易上手,但是也会遭遇各种疑难杂症,其中goroutine泄漏就是重症之一,其出现往往需要排查很久,有人说可以使用pprof来排查,虽然其可以达到目的,但是这些性能分析工具往往是在出现问题后借助其辅助排查使用的,有没有一款可以防患于未然的工具吗?当然有,goleak他来了,其由Uber团队开源,可以用来检测goroutine泄漏,并且可以结合单元测试,可以达到防范于未然的目的,本文我们就一起来看一看goleak。gor...原创 2022-05-14 20:34:43 · 515 阅读 · 0 评论