分类 go 中的文章

Ubuntu 18.04 安装 k8s

更换 软件源 翻墙 基本配置 内存交换 防火墙 selinux 安装 docker 配置 kubernetes 源 + 安装工具 kubelet kubeadm kubectl sudo apt-get update && sudo apt-get install -y apt-transport-https curl curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl 没有梯子的启动方法 有梯子 FAQ apt-get update locked root@ubuntu:/etc/apt# apt-get update 正在读取软件包列表。.. 完成 E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 其……

阅读全文

ubuntu 权限相关

用户 who 命令用于查看当前所有登录系统的用户信息 whoami 该命令用户查看当前系统当前账号的用户名。 cat /etc/passwd 查看系统用户信息 su 切换用户, 后面可以加“-”。 su = su root 切换到 root 用户 su - 切换到 root 用户,同时切换目录到/root su - root 切换到 root 用户,同时切换目录到/root su - 普通用户 切换到普通用户,同时切换普……

阅读全文

使用 Goland 安装多个版本的 go

前言 windows 环境上,使用安装包安装多个版本 go 时,发现必须得卸载之前的版本。 开始 发现 使用 goland 时发现,goroot 可以选择: 通过 download 添加版本 选择需要版本 go , 选择文件夹, apply 后, goland 会去下载相应版本 go goroot 随需选择使用相应 go 版本即可 参考 goland 官方文档……

阅读全文

Go 中 Byte Rune——类型别名

byte 实质上就是 uint8 类型。byte 用来强调数据是 raw data,而不是数字; rune 实质上就是 int32 类型。而 rune 用来表示 Unicode 的 code point。 uint8 the set of all unsigned 8-bit integers (0 to 255) int32 the set of all signed 32-bit integers (-2147483648 to 2147483647) byte alias for uint8 rune alias for int32 // byte is an alias for uint8 and is equivalent to uint8 in all ways. It is // used, by convention, to distinguish byte values from 8-bit unsigned // integer values. type byte = uint8 // rune is an alias for int32 and is equivalent to int32 in all ways. It is……

阅读全文

go map 无序原因

连续两次被问到 map 遍历输出无序的原因 看过数据结构的我自信的回答:应为底层是散列表,没有顺序表内存上的连续,也没有链表逻辑上的前后继关系。 面试官笑得很诡异,而且就到此为止了。 直到我看到这段代码: ... // decide where to start r := uintptr(fastrand()) if h.B > 31-bucketCntBits { r += uintptr(fastrand()) << 31 } it.startBucket = r & bucketMask(h.B) it.offset = uint8(r >> h.B & (bucketCnt - 1)) // iterator state it.bucket = it.startBucket 遍历过程中……

阅读全文

goroutine 协程数目限制

协程属于用户态线程,逻辑由用户代码控制。 系统本身不对 goroutine 数目进行限制。 虽然 golang 中协程开销很低,但是在一些情况下还是有必要限制一下协程的开启数,如果你的协程数太过庞大,可能出现: 系统资源占用率不断上涨 输出一定数量后:控制台就不再刷新输出最新的值了 信号量:signal: killed 解决方式: buffered channel +……

阅读全文

Defer Recover Panic 三剑客

recover() 用于将 panic 的信息捕捉。 recover 必须定义在 panic 之前的 defer 语句中。 在这种情况下,当 panic 被触发时,该 goroutine 不会简单的终止,而是会执行在它之前定义的 defer 语句。 不再执行 panic 之后的语句 总之 使用时 recover 和 defer 搭配,就是三件套 panic->defer->recover 坑 函数嵌套后,defer 嵌套后就不管用 recover 必须放在 defer 中,否则只返回 nil 工作中没实际用过,有空补充点……

阅读全文