Go Set 数据结构的地道写法
纪录近期从 JavaScript 迁移到 Go 的过程中实践 Set 资料结构的方式。先前代码使用 JavaScript Set 来实现不重复资料定义,但在 Go 语言当中并没有实践 Set 资料结构,但我们可以透过改造 map 来实践。
纪录近期从 JavaScript 迁移到 Go 的过程中实践 Set 资料结构的方式。先前代码使用 JavaScript Set 来实现不重复资料定义,但在 Go 语言当中并没有实践 Set 资料结构,但我们可以透过改造 map 来实践。
纪录使用到其中一项 Go 1.16 的 embed 功能,可以把任何档案在编译时就包进去,进而不用烦恼路径与环境问题。如果资料需要在 runtime 被修改,那就不适合使用 embed,但如果它是「版本的一部分」,那 embed 是更安全的选择。
从 JavaScript 转写 Go 我其实还是不太熟悉 Go 如何模组化处理代码,虽然它们有大致相似的地方,但使用体验感觉非常简单甚至到简陋的程度,当然简单并不意味着「容易」或「没用」,Go 简单且固执己见的哲学在各方面都感受得到。
处理传递资料时都快忘了有「序列化与反序列化资料」这个步骤,因为都被套件像是:Axios 抽象掉了,近期在写后端也重新温习相关知识,也延续先前文章:Go Struct Tag 是什么?如何透过 reflect 动态处理栏位?探讨 Go 如何处理序列化资料。
Context 是 Go 1.7 添加于标准函式库的功能。常在存取资料库或其他服务时会遇到,初步看起来是用于「传递取消信号」用途的语法,用于处理 goroutine:背负期限(deadline)、取消信号(cancellation signal)、传递请求相关的值(request-scoped values)。
当在 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。