Golang CHANGELOG History(截至 2025.11.07 的完整变更日志 Changelog)
Golang Changelog**:
Go 语言版本变更日志(截至 2025.11.07 的变更日志)
Go 1.25 (2025 年 8 月 12 日发布)
发布日期: 2025 年 8 月 12 日
版本周期: 距离 Go 1.24 发布六个月
兼容性: 保持 Go 1 的兼容性承诺
Golang Changelog**:
发布日期: 2025 年 8 月 12 日
版本周期: 距离 Go 1.24 发布六个月
兼容性: 保持 Go 1 的兼容性承诺
Golang 接口由使用者定义,而不是由实现者定义。开发常见的疑惑:“如果接口是使用者定义的,那使用者怎么知道实现者有没有那个方法?会不会猜错?是不是反而更难用了?”
这个问题是很多人的困惑,而且触及了 Go 接口设计哲学中最容易让人困惑的核心矛盾:
“如果接口是使用者定义的,那使用者怎么知道实现者有没有那个方法?会不会猜错?是不是反而更难用了?”
我们来一层层拆解这个疑问,你会发现:Go 的设计其实不是“让使用者去猜”,而是“让能力自然暴露”。
rune 的设计哲学| 层面 | Go 的选择 | 开发者收益 |
|---|---|---|
| 存储 | 字符串 = UTF-8 字节序列 | 兼容性高,节省空间(ASCII 高效) |
| 操作 | rune = Unicode 码点 | 逻辑清晰,避免字节错误 |
| 遍历 | range 自动解码 UTF-8 | 开箱即用,安全可靠 |
| 扩展 | 标准库 + x/text 生态 | 支持归一化、断行、排序等高级需求 |
💬 Go 之父 Rob Pike 的名言:
“UTF-8 is the native text format of Go. Strings are UTF-8. Period.”
而rune,正是我们与这个“原生格式”对话的桥梁。
类型定义和类型别名的区别:
区别就是类型定义是完全定义了一种新的类型,
而类型别名只是给现有的类型取了一个别名 alias。(编译器会替换成基本类型。)
Golang 的 Struct 结构体(源于 C 语言,但又有别于 C)的灵活性:
go 语言中并没有像 C++,Java 语言中这类的 Class,它只含有像 C 语言中的结构体,用结构体和指针等特性,完成一个类的作用,很巧妙的使用了指针和结构体,不仅是 go 的面向对象,包括 go 语言中的 map 等操作都是借助了结构体。其实,说白了,C++、Java 等面向对象的语言中,类的底层实现就是结构体,对象的引用就是指针,只是语言把他们封装起来了而已。很多人刚接触面向对象很不理解这些东西也应该缘于此。
1.如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。
2.如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重新分配内存给 slice,使用值类型。
3.如果接受者是一个小的数组或者原生的值类型结构体类型(比如 time.Time 类型),而且没有可修改的字段和指针,又或者接受者是一个简单地基本类型像是 int 和 string,使用值类型就好了。