
Golang
文章平均质量分 61
Toormi
这个作者很懒,什么都没留下…
展开
-
如何让Go 的regexp包支持 (?!...) 这样的 Perl 语法?
Go 的标准库regexp包基于 RE2 引擎,而 RE2 故意设计为不支持 Perl 风格的复杂特性(如!...)负向前瞻、后顾断言等),这是为了保证正则表达式的执行时间是线性的(O(n)),避免潜在的性能问题(例如正则表达式的“灾难性回溯”)。因此,在 Go 的标准库中,无法直接让regexp支持!...)这样的语法。不过,如果你确实需要在 Go 中使用 Perl 风格的正则表达式(包括负向前瞻!...)原创 2025-03-20 22:28:07 · 342 阅读 · 0 评论 -
Golang regexp.MustCompile报panic:error parsing regexp: invalid or unsupported Perl syntax: `(?!`
Go 的regexp不支持!...)这样的 Perl 语法。使用可以替代你的需求,既简单又高效。如果你有更复杂的需求,可以考虑用代码逻辑(而不是纯正则)来实现,例如先检查长度和首字符,再用正则匹配剩余部分。原创 2025-03-20 22:26:23 · 321 阅读 · 0 评论 -
make(chan int, 0)和make(chan int)有什么区别?
在 Go 语言中,和这两种初始化 channel 的方式在语法上有所不同,但它们底层的结果是一致的,最终都会创建一个无缓冲的 channel(unbuffered channel)。原创 2025-03-14 16:13:37 · 282 阅读 · 0 评论 -
Go1.24报错non-constant format string in call to fmt.Printf
常量格式字符串:直接使用字符串字面量,避免动态变量。动态格式字符串:确保提供匹配的参数,或用其他函数(如)替代。兼容性:升级到 Go 1.24 后,运行go vet检查代码,确保符合新规则。原创 2025-03-01 11:30:36 · 454 阅读 · 0 评论 -
Go 1.24版本在性能方面有哪些提升?
这种实现方式通过压缩索引和更高效的查找机制,降低了内存使用量并提高了查询速度。根据测试,某些场景下性能提升接近50%[1][2][5]。这些改进使得Go程序在一系列代表性基准测试中平均降低了2%至3%的CPU负载[1][2][4]。:新的互斥锁实现在高竞争情况下取得了显著的可扩展性提升,减少了执行线程争用的情况[5]。:尤其是针对小对象的内存分配进行了优化,减少了分配开销[1][2]。:改为并发的HashTrieMap数据结构,性能有了显著提高[6]。原创 2025-02-26 16:46:45 · 547 阅读 · 0 评论 -
Go1.22填上for range大坑
从Go 1.22开始,每次迭代都会创建新的变量,因此不再需要使用局部变量来解决这个问题[2][6].循环的变量只创建一次,并在每次迭代中被赋予对应的值,这容易导致一些错误[6].的value只初始化一次的问题[2][6]. 在Go 1.22之前的版本中,只会被声明和初始化一次,在快速的循环迭代中,每个goroutine中引用的。实际上是同一个变量,等到goroutine真正开始执行的时候,循环已经结束,val的值变成了最后一次循环的值[3].循环的每次迭代都会创建新的变量,解决了之前。原创 2025-02-20 10:15:50 · 291 阅读 · 0 评论 -
Go1.22填上闭包捕获变量大坑
因此,从Go 1.22版本开始,闭包会捕获变量的实际引用,而不是之前版本中的共享引用,这大大减少了因作用域问题引起的错误。原创 2025-02-20 10:14:03 · 239 阅读 · 0 评论 -
Golang中如何正确close channel
关闭 channel 表明不会再有更多的数据会被发送到该 channel,但是已发送的数据仍然可以被接收。通常,关闭 channel 的操作应该在所有发送者完成发送后进行,确保没有其他协程仍在尝试向已关闭的 channel 发送数据。通常只有发送数据的那一方才关闭 channel,接收方不应该关闭 channel,因为接收方无法知道何时发送方已经完成所有的发送操作。总结起来,关闭 channel 是为了通知接收方没有更多的数据,正确使用。时,如果一个 channel 被关闭且没有更多的数据可接收,则。原创 2025-02-20 09:56:49 · 494 阅读 · 0 评论 -
Go 1.21在性能方面有哪些提升?
总的来说,Go 1.21通过PGO、垃圾回收优化、编译器优化等手段,在编译速度、运行时性能和内存管理等方面都取得了显著的提升。这些改进使Go在系统编程领域的优势更加突出。原创 2024-08-19 16:05:20 · 723 阅读 · 0 评论 -
Go 1.22在性能方面有哪些提升?
总体而言,Go 1.22在内存管理、编译优化和循环变量处理等方面取得了显著的性能提升,但也伴随了一些性能回归的问题,开发者在升级时需注意这些变化。原创 2024-08-19 16:04:23 · 625 阅读 · 0 评论 -
Go 1.23版本在性能方面有哪些提升?
在Go 1.23中,使用PGO的构建时间显著减少。之前,启用PGO时,大型构建可能会导致超过100%的构建时间增加,而在新版本中,这一开销已降低到单数字的百分比[1][5]。这些性能提升使得Go 1.23在构建速度、运行效率和内存管理等方面表现更为出色,进一步增强了其作为系统编程语言的优势。: 编译器现在能够重叠局部变量的堆栈帧槽,这减少了Go应用程序的堆栈使用,从而提升了整体性能[1][3]。原创 2024-08-19 16:01:38 · 948 阅读 · 0 评论 -
Golong中的http.Transport详解
你可以创建一个自定义的,以便更细粒度地控制HTTP请求的发送。例如,你可以设置代理服务器、修改拨号函数、限制空闲连接数和存活时间等。下面是一个创建自定义在这个例子中,我们创建了一个自定义的,并将其设置为的Transport字段。这样,当我们使用client.Get发送请求时,请求就会通过我们自定义的发送。总的来说,是Go语言HTTP客户端的核心组件,它提供了丰富的字段和方法,让我们可以灵活地控制HTTP请求的发送。理解的工作原理和用法,对于编写高效的HTTP客户端代码非常重要。原创 2024-05-13 10:26:21 · 1472 阅读 · 0 评论 -
如何使用google.protobuf.Struct?
包提供了一种方式来创建和操作类型的数据。是一种灵活的数据类型,可以表示任何结构化数据。以下是如何使用structpbStructStruct注意:在从Struct读取数据时,需要进行类型断言,因为AsMap函数返回的是类型的数据。原创 2024-05-08 22:00:29 · 1871 阅读 · 0 评论 -
如何在 Gin 框架中处理多个 websocket 连接?
在这个示例中,当一个客户端连接到"/ws"端点时,会创建一个新的WebSocket连接并注册到hub。hub跟踪所有活动的连接,并将收到的消息广播给所有客户端。在你的Gin路由处理器中,将HTTP连接升级为WebSocket连接,创建一个新的。实现运行,注册新客户端,注销客户端,以及向所有客户端广播消息的方法。结构体来保存WebSocket连接和发送通道。,并启动写入和读取的goroutines。结构体来保存客户端和广播通道。实现写入和读取消息的方法。对象,将新客户端注册到。首先,在你的终端运行。原创 2024-05-05 11:14:42 · 766 阅读 · 0 评论 -
如何在Gin框架中使用Websocket?
当客户端向这个路径发送GET请求时,我们的服务器就会将这个HTTP连接升级为一个Websocket连接。然后,我们进入一个无限循环,不断地从Websocket连接中读取消息,然后将这个消息原样写回。这就是一个最基本的Websocket回声服务器。函数,例如,你可以在接收到消息时调用你的业务逻辑函数,而不是简单地将消息原样写回。在Gin框架中使用Websocket,你需要使用一个第三方库,例如。在这个例子中,我们创建了一个新的Gin路由。你可以根据你的需求修改。原创 2024-05-05 11:13:30 · 766 阅读 · 0 评论