fsoooo Blog

内不欺己,外不欺人,上不欺天。君子所以慎独。

Go学习笔记 字典

######字典在数学上的词汇是映射,将一个集合中的所有元素关联到另一个集合中的部分或全部元素,并且只能是一一映射或者多对一映射。 数组切片让我们具备了可以操作一块连续内存的能力,它是对同质元素的统一管理。而字典则赋予了不连续不同类的内存变量的关联性,它表达的是一种因果关系,字典的 key 是因,字典的 value 是果。如果说数组和切片赋予了我们步行的能力,那么字典则让我们具备了跳跃...

Go学习笔记 变量

#####任何一门语言里面最基础的莫过于变量了。 如果把内存比喻成一格一格整齐排列的储物箱,那么变量就是每个储物箱的标识,我们通过变量来访问计算机内存。没有变量的程序对于人类来说是可怕的,需要我们用数字位置来定位内存的格子,人类极不擅长这样的事。这就好比一岁半左右的幼儿还没有学会很多名词,只能用手来对物体指指点点来表达自己的喜好。 变量让程序逻辑有了丰富的表达形式。 定义变量的三种方式 ...

Go学习笔记 变性指针

unsafe.Pointer Pointer 代表着变量的内存地址,可以将任意变量的地址转换成 Pointer 类型,也可以将 Pointer 类型转换成任意的指针类型,它是不同指针类型之间互转的中间类型。Pointer 本身也是一个整型的值。 type Pointer int 在 Go 语言里不同类型之间的转换是要受限的。普通的基础变量转换成不同的类型需要进行内存浅拷贝,而指针...

Go学习笔记 反射

反射是 Go 语言学习的一个难点,但也是非常重要的一个知识点。反射是洞悉 Go 语言类型系统设计的法宝,Go 语言的 ORM 库离不开它,Go 语言的 json 序列化库离不开它,Go 语言的运行时更是离不开它。笔者在学习反射功能的时候也是费了好大一番功夫才敢说自己确实搞懂了。下面请读者跟着我的步伐来一步一步深入理解反射功能。 反射的目标 反射的目标之一是获取变量的类型信息,例如这个类型...

Go学习笔记 协程与通道

协程和通道是 Go 语言作为并发编程语言最为重要的特色之一,初学者可以完全将协程理解为线程,但是用起来比线程更加简单,占用的资源也更少。通常在一个进程里启动上万个线程就已经不堪重负,但是 Go 语言允许你启动百万协程也可以轻松应付。 如果把协程比喻成小岛,那通道就是岛屿之间的交流桥梁,数据搭乘通道从一个协程流转到另一个协程。通道是并发安全的数据结构,它类似于内存消息队列,允许很多的协程并发...

Go学习笔记 初学协程

###协程 学习go也有一段时间了,这里讲一下自己对go协程的使用理解。 go很多人都知道,毕竟有个好爹Google,提起go和其它语言最大区别莫过于 goroutine,也就是go的协程,先来一个demo: package main func say(s string) { for i := 0; i < 5; i++ { println(s) ...

Go学习笔记 切片的三种特殊状态

我们今天要来讲一个非常细节的小知识,这个知识被大多数 Go 语言的开发者无视了,它就是切片的三种特殊状态 —— 「零切片」、「空切片」和「nil 切片」。 切片被视为 Go 语言中最为重要的基础数据结构,使用起来非常简单,有趣的内部结构让它成了 Go 语言面试中最为常见的考点。切片的底层是一个数组,切片的表层是一个包含三个变量的结构体,当我们将一个切片赋值给另一个切片时,本质上是对切片...

Go学习笔记 切片

切片(Slice)无疑是 Go 语言中最重要的数据结构,也是最有趣的数据结构,它的英文词汇叫 slice。所有的 Go 语言开发者都津津乐道地谈论切片的内部机制,它也是 Go 语言技能面试中面试官最爱问的知识点之一。初级用户很容易滥用它,这小小的切片想要彻底的理解它是需要花费一番功夫的。在使用切片之前,我觉得很有必要将切片的内部结构做一下说明。 学过 Java 语言的人会比较容易理解切片,...

Go学习笔记 分支和循环

####程序 = 数据结构 + 算法 上面这个等式每一个初学编程的同学都从老师那里听说过。它并不是什么严格的数据公式,它只是对一般程序的简单认知。 数据结构是内存数据关系的静态表示,算法是数据结构从一个状态变化到另一个状态需要执行的机器指令序列。 数据结构是静态的,算法是动态的。数据结构是状态,算法是状态的变化。 变量,它是数据结构的最小单位,本节我们要讲的分支与循环,它是算...

Go学习笔记 Hello World

Go 语言的 Logo 最初 Go 语言的 Logo 是一只可爱的土拨鼠,土拨鼠昼伏夜出的习性让它显得很有 Geek 范。土拨鼠的行动其实并不敏捷,不过它繁殖能力很强,生长发育的很快。 到了 2018年,Go 语言重新制定了 Logo,消灭了土拨鼠,取而代之的是纯文字。这好像是在告诉用户 Go 语言不再是一个玩具语言,而是一个严肃的高效的正式语言。 不过这个新 Logo 不是很...