240 发简信
IP属地:北京
  • 120
    彻底搞懂Go泛型中dict的数据结构

    Why为什么要研究dict的结构?Go泛型实现并没有对dict的数据结构进行统一的限制,而是针对不同的gcshape生成不同的dict数据,并存储在只读数据区。为了研究Go泛...

  • go1.21 循环用临时变量不再共享

    效果: 普通for循环 可能得输出: 对比:使用1.18版本的go运行,输出如下: for...rang循环: 可能得输出: 对比:使用1.18版本的go运行,输出如下: 至...

  • go buildflag之-trimpath

    What: 也就是说,在编译产物中将不会使用文件的绝对路径,而是使用module、go或者GOPATH。 Why: 添加-trimpath的收益: 减少二进制的size(实测...

  • 120
    Go iota引起的线上事故

    背景是这样的,前端页面有一个日志level的枚举值传递给后端,server端会对该枚举值的有效性进行校验,QA测试阶段使用了默认的level(也就是Info),并没有测试出这...

  • [Go] fmt.Printf("%s", err) 怎么可能?

    工作中我们会发现代码中会使用%s格式化err的情况,包括一些开源代码。但是你翻一下源码,内置的error接口里面,并没有String() string方法呀,怎么可能正常地打...

  • Go验证接口和nil的比较

    预备知识: 任何空接口类型的变量,即interface{},其内存布局均如下: 判断interface{}变量是否为nil,那么就是在判断该空接口变量的动态类型和动态值是否均...

  • Go源码编译

    以go 1.18.2版本为例;假设你还没有在系统装安装go环境;下面一步步教你源码编译。系统环境: 通过二进制文件的形式,安装go环境 编译go源码 设置编译后的go环境变量...

  • 120
    跨域请求CORS

    预备知识: 只有浏览器才会有跨域请求限制,也就是如果是服务器之间直接发起http请求不会存在该限制。 CORS是在不满足同源策略的情况下,才有可能引起跨域请求限制。 同源策略...

  • synapse安装

    https://www.informaticar.net/install-matrix-synapse-on-centos-8/[https://www.informatic...

  • go 1.17 Register-based Go calling convention

    官方博客: https://go.googlesource.com/proposal/+/master/design/40724-register-calling.md[ht...

  • 120
    意料之外:空接口和nil的比较

    当将一个值为nil的接口变量w赋值给空接口类型i后,i为nil。 但是将一个值为nil的接口指针变量w赋值给空接口类型i后,i就不等于nil了。 what??? 当我无意间测...

  • 120
    实现多个接口的类型,在类型断言时的行为

    先上代码: 类型T,底层数据为int类型(类型T并非int的类型别名,注意区分type T = int),其同时实现了接口A和接口B。上面的代码运行时,结果如下: 但是我稍微...

  • go防止接口被无意间实现

    go语言接口的独特之处在于它是满足隐式实现的鸭子模式,如果走起路来像鸭子,叫声也像鸭子,那么就会被认为是鸭子。在go语言实现某个接口,并不需要显式声明,只要实现了接口声明的方...

  • 120
    MYSQL一次性返回查询结果,还是分批返回?

    结论:如果结果集大小超过TCP MSS(MAX SEGMENT SIZE),将会分批将结果集返回给客户端。 实验过程如下(除了验证分批传输以外,还有列出和mysql交互过程中...

  • 120
    TCP keepalive是什么?

    wikipedia:A keepalive (KA) is a message sent by one device to another to check that the...

  • nc命令使用

    测试服务端某个端口是否可达: 只监听ipv4地址,不监听ipv6地址: 当客户端断开连接时,nc listen服务会立即退出 这是因为nc默认只服务一个连接,如果想改变该行为...

  • 判断字段值是否为null,该使用 '=null' 还是 'is null'?

    结论: 一定要使用 'is null' 来判断一个字段的值是否为null 任何和NULL值做比较的表达式的值都为NULL,就是这样: 而 'is null' 语句能够返回预期结果:

  • 以下两个sql是如何使用索引的?

    该explain结果中,key字段信息表明该查询使用到了索引: idx_key_part;Extra信息里面包含了Using where和Using index,其中Usin...

  • 非常感谢,你写了这么多的评论,的确是用心了。不过有些点评我并不十分同意,具体如下:
    1. 如果是一个大的slice,我可能并不会真的删除元素,而是使用标记的方法,标记某些位置的索引被删除了
    2. 如果是小的slice,并且在业务代码中,我觉得选择哪个算法在性能上都没啥太大区别,反而会更加关注是否需要修改原始slice。另外如果放在某个关键的技术组件上,还是需要考虑性能的,即使slice元素数量不大;
    3. 第二种方式,底层数组的确是一个,没有重新创建,你可以用我下面的代码跑一下(取slice指针值其实是取slice第一个元素的地址值):
    func main() {
    origin := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    target := origin[:0]
    for _, item := range origin {
    if item != 6 {
    target = append(target, item)
    }
    }

    fmt.Printf("origin: %p, target: %p", origin, target)
    }

    【Golang】slice删除元素的性能对比

    在我写的blog中,这个算是参与度比较高的,所以有必要把程序写的更加容易理解一些。我的电脑配置: 直接上代码: Benchmark结果: 解释: 除了第一种方法外,其他方法都...