Go Core - List + Ring
|Word Count:0|Reading Time:1mins
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2022-05-15
Go Core - Entity

2022-05-15
Go Core - Array + Slice

2022-12-11
Go - Design Philosophy
简单 语言特性始终保持少且足够的水平,不走语言融合的道路,简单的设计哲学是 Go 生产力的源泉 仅有 25 个关键字,主流编程语言最少 内置 GC,降低开发人员内存管理的心智负担 首字母大小写决定可见性,无需通过额外关键字修饰 变量初始为类型零值,避免以随机值作为初值的问题 内置数组边界检查,极大减少越界访问带来的安全隐患 内置并发支持,简化并发程序设计 内置接口类型,为组合的设计哲学奠定基础 原生提供完善的工具链,开箱即用 显式 Go - 程序员应该明确知道在做什么;C - 信任程序员 Go 不允许不同类型的变量进行混合计算,也不会进行隐式自动转换 Go 采用基于值比较的错误处理方案 函数或方法的错误会通过 return 语句显式地返回,并且调用者通常不能忽略对返回的错误的处理 组合 组合是构建 Go 程序骨架的主要方式,可以大幅度降低程序元素间的耦合,提高程序的可扩展性和灵活性 在 Go 中,找不到经典的 OOP 语法元素、类型体系和继承机制,Go 推崇的是组合的设计哲学 提供正交的语法元素,以供后续组合使用 包之间相对独立,没有子包的概念 没有类型层次体系,各类型之间互相独...

2022-12-16
Go - Code Structure
源文件 Go 源文件使用全小写字母形式的短小单词命名,并以 .go 扩展名结尾 如果使用多个单词,将多个单词直接连接起来,而不使用其它分隔符 即 helloworld.go,而非 hello_world.go 尽量不要使用两个以上单词组合作为文件名,否则很难辨认 Hello, World1234567package mainimport "fmt"func main() { fmt.Println("Hello, World!")} 12345678910111213$ tree.└── main.go$ go build main.go$ tree.├── main└── main.go$ ./mainHello, World! 程序结构1package main package 是 Go 语言的基本组成单位,通常使用单个小写单词命名 整个 Go 程序仅允许存在一个 main 包 main.go12345import "fmt"func main() { fmt.Println(&...

2022-02-12
Cloud Native Foundation - Go Memory Management
堆内存管理Linux 进程 管理过程 Allocator 的职责:通过系统调用向 OS 申请内存(MB/GB);响应 Mutator(即应用) 的内存申请(KB) Collector:交还给 Allocator,再由 Allocator 决定是否释放并归还给 OS 初始化连续内存块为堆 在内存申请的时候,Allocator 从堆内存的未分配区域分割小内存块 用链表将已分配内存连接起来 需要信息描述每个内存块的元数据(对象头):大小、是否使用、下一个内存块的地址 Example: Ruby allocates memory from the memory allocator, which in turn allocates from the kernel 面临挑战 内存分配需要系统调用,在频繁分配内存的时候,系统性能较低 C 的每次 malloc 是需要系统调用的 Java 的 Allocator 可以直接一次性申请大内存,然后在用户态再慢慢分配 多线程共享相同的内存空间,同时申请内存,需要加锁,或者采用类似 JVM 中的 TLAB 来缓解竞争 经过不断地内存分配和回收,...

2022-12-22
Go - Variable
内存边界 在编程语言中,为了方便操作内存特定位置的数据,使用变量与特定位置的内存绑定 编译器或者解析器需要知道变量所能引用的内存区域边界 动态语言 解析器可以在运行时通过对变量赋值的分析,自动确定变量的边界 一个变量可以在运行时被赋予大小不同的边界 静态语言 编译器必须明确知道一个变量的边界才允许使用该变量 但编译器无法自动分析,因此边界信息必须由开发者提供 - 变量声明 在具体实现层面,边界信息由变量的类型属性赋予 变量声明 Go 是静态语言,所有变量在使用前必须先进行声明声明:告诉编译器该变量可以操作的内存的边界信息(由变量类型信息提供) 通用 变量声明形式与主流静态语言的差异 - 将变量名放在了类型前面(方便语法糖移除 type) 如果没有显式为变量赋予初值,Go 编译器会为变量赋予类型零值 1var a int // a 的初值为 int 类型的零值 0 Go 的每种原生类型都有其默认值,即类型零值复合类型(array、struct)变量的类型零值为组成元素都为零值的结果 原生类型 类型零值 整型 0 浮点 0.0 布尔 FALSE 字符...
Announcement
Things are always unexpected!






