今天无意中看到Go101发了一个推特:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main

import (
"fmt"
"reflect"
)

func p(a, b interface{}) {
fmt.Print(":", reflect.DeepEqual(a, b))
}

func main() {
a := [1]func(){func(){}}
p(a, a)
p(a[:], a[:])
b := a
p(a[:], b[:])
}

输出结果?? :true:true:false

阅读全文 »

好久没有更新文章了,表达能力生疏了许多😄....
今天扯扯:rwmutex 被称为读写锁。一说到【锁】最直接的联想可能就是lock()、Rlock()、unlock()、Runlock()之类的,但是作为程序猿,还是要了解下底层的设计和相关的逻辑实现,以便于把这种锁的设计思想应用到其它场景中,好了,不废话了,开题吧。
从锁的结构设计-->加锁的过程--->加锁的粒度---->解锁释放,整个生命周期来看rwmutex的具体实现。
阅读全文 »

版本

1
2
◯  go version
go version go1.14.9 darwin/amd64

用Go的都离不开Context,引用官网的一句话来描述Context包:

Package context defines the Context type, which carries deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes.

主要掌握四个方法的使用

1
2
3
4
WithCancel
WithDeadline
WithTimeout
WithValue

前期ready

要用下面的方法,先了解下部分结构和逻辑:

既然context全部都是和取消相关的,最起码Go在设计时会有这么一个结构。

阅读全文 »

自盘古开天辟地~~~~
扯远了…
完整的分享下Git的使用和学习的知识点,之前章节中的Git常用技巧是我之前部分快速使用的场景,适合于有经验的开发者,现在来系统的分享下对于Git的理解,也算是自己学习的记录。

前景

SVN估计是家喻户晓了,一直被用作'版本管理'代码仓库。(ps:不算是完整的版本管理.)
Git的出现,是linus之父休假时产出的“作品”,版本管理 & 代码仓库的作用。总而言之,用熟练Git了,就再也回不去了。

阅读全文 »

GPG场景

Git 虽然是密码级安全的,但它不是万无一失的。 如果你从因特网上的其他人那里拿取工作,并且想要验证提交是不是真正地来自于可信来源, Git 提供了几种通过 GPG 来签署和验证工作的方式。

最终效果:如下图所示

安装过程

windows安装地址: 点击下载

mac os为例:

阅读全文 »

学习方式

多练多得,直接学习官网理解。

以下仅仅是部分用到的场景和部分场景记录,不代表全部情况,如有错误,请及时指正。

Git版本:

1
2
1944 ± git version 
git version 2.28.0

先说说Git的常用命令:(可跳过)

阅读全文 »