go 中的文章

Go并发编程:Channel和WaitGroup

并发是Go语言的一个强大特性,它允许开发者编写高效且可扩展的应用程序。在Go中,用于管理并发的两种常用机制是Channel和WaitGroup。本文将探讨Channel和WaitGroup之间的相似之处和区别,并讨论何时以及如何有效地使用它……

阅读全文

Go 1.18新特性学习笔记04: Go泛型的基本语法

今天继续学习Go 1.18引入的泛型,每天利用几分钟的时间来学习,慢慢积累。 前两天学习了在Go中如何定义泛型函数,并学习了Go泛型中的类型约束(Type Constrant)的概念,今天通过参考Go官方的泛型技术提案文档,简单整理一下Go泛型的……

阅读全文

Go 1.18新特性学习笔记03: 将类型约束声明为接口

今天继续学习Go 1.18引入的泛型,我们将以Go官方的泛型教程为资料,每天利用几分钟的时间来学习,慢慢积累。 昨天我们定义了一个泛型函数,代码如下: 1// SumIntsOrFloats sums the values of map m. It supports both int64 and float64 2// as types for map values. 3func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { 4 var s V 5 for _, v := range m { 6 s += v 7……

阅读全文

Go 1.18新特性学习笔记02: 定义泛型函数

今天开始,来学习Go 1.18引入的泛型,我们将以Go官方的泛型教程为资料,每天利用几分钟的时间来学习,慢慢积累。 很多编程语言都支持泛型的特性,泛型是对具体类型或属性的抽象替代,可以实现在编写代码和编译代码时无需知道其在运行时具体类型的特性。……

阅读全文

Go 1.18新特性学习笔记01: 安装

Go 1.18这个大型版本终于发布了,包括新功能、性能改进以及对语言的最大改变。 官方博客称Go 1.18的部分设计甚至开始于10年前首次发布Go的时候。具体来说,Go 1.18包含以下几大特性: 泛型(Generics): Go 1.18开始引入了泛型的支……

阅读全文

Go源码学习: 切片slice的内部数据结构

Go语言中的切片slice的底层数据结构是数组,这是即使是Go的初学者都了解的。 前面我们学习了string类型在运行时由reflect.StringHeader表示,StringHeader可以理解为string在运行时的"描述符……

阅读全文

Go源码学习: string的内部数据结构

前面在学习Go程序进程的内存布局时,分析了一个Go程序在Linux下ELF文件格式经过简化后大致如下图所示: Go二进制文件ELF主要有这几个section组成: .text, .rodata, .data, .noptrdata, .bss, .noptrbss。 .rodata中存放的是常量数据,程序中的字面量在……

阅读全文