goroutin 与 map 并发的采坑事件

goroutine 与 map 并发的采坑事件

1. goroutine 与map 的并发读写操作

在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。

因为map为引用类型,所以即使函数传值调用,参数副本依然指向映射m, 所以多个goroutine并发写同一个映射m, 写过多线程程序的同学都知道,对于共享变量,资源,并发读写会产生竞争的, 故共享资源遭到破坏

[Read More]

Go语言核心36讲-02工作区和GOPATH

02 | 命令源码文件

我们已经知道,环境变量 GOPATH 指向的是一个或多个工作区,而每个工作区中都会有以代码包为基本组织形式的源码文件。

这里的源码文件又分为三种,即:命令源码文件、库源码文件和测试源码文件,它们都有着不同的用途和编写规则。

1. 什么是命令源码文件,用途是什么?如何编写它

1.1 命令源码文件:

==命令源码文件是程序的运行入口,是每个可独立运行的程序必须拥有的。==

[Read More]

Go语言核心36讲-01工作区和GOPATH

01 | 工作区和GOPATH

说明: 该系列文章是个人购买了极客时间Go语言专栏由赫林老师著作的 Go语言核心36讲系列的个人总结归纳,算是自己对知识付费的一个负责吧。希望通过这样的笔记和该系列文章能加强自己对Go语言的核心知识的理解和运用。

首先我们去安装Go环境时都回去官网下载安装包的二进制包运行安装就可以使用了

然后,解压缩包、放置目录、配置环境变量,并通过在命令行中输入:

命令行运行下面命令:

[Read More]

Golang 关于 nil 的认识

Golang 关于 nil 的认识

1. 什么是 nil ?

大家都清楚,当你声明了一个变量 但却还并木优赋值时,golang中会自动给你的变量类型给一个对应的默认零值。这是每种类型对应的零值:

bool      -> false                              
numbers -> 0                                 
string    -> ""      

pointers -> nil
slices -> nil
maps -> nil
channels -> nil
functions -> nil
interfaces -> nil

[Read More]

域名解析cname和A记录

域名解析cname和A记录

什么是 cname?

CNAME 被称为规范名字。这种记录允许您将多个名字映射到同一台计算机。 通常用于同时提供WWW和MAIL服务的计算机。例如,有一台计算机名为“r0WSPFSx58.”(A记录)。 它同时提供WWW和MAIL服务,为了便于用户访问服务。可以为该计算机设置两个别名(CNAME):WWW和MAIL。

[Read More]

本地配置SSH 登录服务商

本地配置SSH 登录服务商

1. 创建ssh公钥和私钥

在你的终端输入:

ssh-keygen

cd .ssh/

open ./

你就会看见 有两个文件:

  • ### id_rsa (这是用于你本地登录服务器的秘钥)
  • ### id_rsa.pub (这就是要给服务器配置你的公钥)

[Read More]