Go 字符串处理使用 Rune
当在 Go 字串中索引位置 `n` 时,为什么没有得到第 `n` 个字元?相较于其他程式语言一串文字在遍历时会预期拿到单一个字符,在 Go 会拿到「Rune」;如果直接透过索引取得 string 内容会拿到 byte。透过实际解 Codewars 题目了解处理字串要留意的东西
当在 Go 字串中索引位置 `n` 时,为什么没有得到第 `n` 个字元?相较于其他程式语言一串文字在遍历时会预期拿到单一个字符,在 Go 会拿到「Rune」;如果直接透过索引取得 string 内容会拿到 byte。透过实际解 Codewars 题目了解处理字串要留意的东西
最近在与 MongoDB 互动时发现 Struct 栏位结尾有一段语法不是很熟悉,这篇文章探讨 Struct Tag 存在的原因以及解决什么问题。与其命令式的操纵资料,透过宣告式的方式来描述资料格式是 Struct Tag 的主要用途。
在 Go 语言中,有两种常见的资料结构可用于表示「序列资料」:Array 与 Slice。这两者在语法上相似,但背后行为与使用情境差异非常关键。简单来说,Array 是固定长度(Static Array),而 Slice 是动态长度(Dynamic Array)。
对于「多型 Polymorphism」的概念理解像是「要做一件事,但这件事对不同对象来说实践的方式不同」。具体来说像是各种「形状」都可以「算面积」,但背后实践的方法却不同,而在 Go 当中 interface 就是方法的集合。
第一次看到 Go 的 Receiver 函数会觉得这是啥怪语法,函数名前面还能接收参数?Go 语言提倡「Composition over inheritance」,并极力追求代码的简洁性,以此规避 class-based OOP 所带来的复杂性。
Go 设计上一切数值都是直白的「Passing by value」,会有「Passing by value」的效果原因是因为 Reference Types 带有指标,复制时是复制指标值。要让 Value Types 有 Passing by Reference 的效果要显式的使用 Pointer。