Go语言 相关文章

Go语言
  • unsafe包

    Go语言的unsafe包提供了一些用于进行低级内存操作的工具,允许程序员绕过Go语言的类型安全和内存安全机制。这些工具通常用于高级编程任务,例如与系统接口交互或进行性能优化。不过,使用unsafe包时需要非常小心,因为它可以导致程序的不稳定性和不可预知的行为。
    2024-06-18·135 阅读
  • Golang 中的 GC

    Go 语言的垃圾收集器从诞生的第一天起就一直在演进,除了少数几个版本没有大更新之外,几乎每次发布的小版本都会提升垃圾收集的性能,而与性能一同提升的还有垃圾收集器代码的复杂度,下面是垃圾收集器的演进过程
    2024-04-19·106 阅读
  • golang内存分配

    基于 TCMalloc 思想进行内存分配的大致流程。总的来说,就是先向操作系统申请一大块内存,然后再对这一大块内存进行瓜分,分别分配给 PageHeap、CentralCache 和 ThreadCache。应用程序需要内存的时候就向上级申请,上级内存不够就向上上级申请,上上级不够就向上上上级申请。由于向本地的线程的 ThreadCache 申请内存时无需加...
    2024-03-25·43 阅读
  • defer 延迟调用

    defer 的另一个特性是参数的预计算,defer 语句会在声明它的时候立即对其后的函数调用中的参数进行求值。这意味着即使 defer 延迟调用的函数会在最后执行,其参数的值却是在 defer 语句被执行时确定的,这就是所谓的参数预计算。
    2024-03-24·18 阅读
  • for ranger 遍历

    可以看到不管是小数据量还是大数据量的 map,直接同时获取 key 和 value 的性能会更好(比另一种方式差不多快 1.5 倍)。因为对于每个迭代项,map 内部的哈希查找只会执行一次。而如果只获取 key,然后手动通过 key 去查找 value,这实际上导致了额外的哈希查找开销。
    2024-03-24·29 阅读
  • go语言常见的字符串处理函数

    总结Go语言中常用的字符串操作函数,并给出每个函数的用法示例。
    2024-03-11·63 阅读
  • 雪花算法

    时间回拨问题:由于机器的时间是动态的调整的,有可能会出现时间跑到之前几毫秒,如果这个时候获取到了这种时间,则会出现数据重复。机器 id 上限:机器 id 是固定的 bit,那么也就是对应的机器个数是有上限的,在有些业务场景下,需要所有机器共享同一个业务空间,那么 10bit 表示的 1024 台机器是不够的。
    2024-01-29·53 阅读
  • Go语言中的闭包详解

    Go 语言中闭包是引用了自由变量的函数,被引用的自由变量和函数一同存在,即使已经离开了自由变量的环境也不会被释放或者删除,在闭包中可以继续使用这个自由变量。闭包也可以说是一个函数和与其相关的引用环境组合而成的实体。简单来说,闭包=函数+引用环境。
    2024-01-27·33 阅读
  • Go Plan9 汇编初探

    关于 Go 语言的汇编器最重要的一点是,它并不是底层机器的直接表示。其中一些细节确实精确映射到机器上,但有些并不是。这是因为编译器套件在常规的编译流程中并不需要一个汇编器阶段。相反,编译器操作的是一种半抽象的指令集,而指令选择部分是在代码生成之后进行的。汇编器工作在这种半抽象形式上,因此当你看到像 MOV 这样的指令时,工具链实际为该操作生成的可能根本不是移...
    2024-01-25·48 阅读
  • 数组和切片

    每个切片实例对应一个 slice header,其中存储了三个字段:array、len、cap。当我们每次在方法间传递切片时,会对 slice header 实例本身进行一次值拷贝,然后将 slice header 的副本传递到局部方法中。然而,这个 slice header 副本中的 array 和原 slice 指向同一片内存空间,因此在局部方法中执行修...
    2024-01-13·24 阅读