一文读懂原子操作、内存屏障、锁(偏向锁、轻量级锁、重量级锁、自旋锁)、Disruptor、Go Context之上半部分
我不想卷,我是被逼的
在做了几年前端之后,发现互联网行情比想象的差,不如赶紧学点后端知识,被裁之后也可接个私活不至于饿死。学习两周Go,如盲人摸象般不知重点,那么重点谁知道呢?肯定是使用Go的后端工程师,那便利用业余时间找了几个老哥对练一下。其中一位问道在利用多个goroutine发送请求拿到结果之后如果进行销毁 ...
Go是怎么解决包依赖管理问题的?
我们先来了解一下 Go 构建模式的演化过程,弄清楚 Go 核心开发团队为什么要引入 Go module 构建模式。
Go 构建模式时怎么演化的?
Go 程序由 Go 包组合而成的,Go 程序的构建过程就是确定包版本、编译包以及将编译后得到的目标文件链接在一起的过程。
Go 语言的构建模式历经了三个迭代和演化过程,分别是最初期的 GOPATH、1 ...
go etcd服务发现
一.etcd简介
etcd 是一个分布式键值对存储系统,由coreos 开发,内部采用 raft 协议作为一致性算法,用于可靠、快速地保存关键数据,并提供访问。通过分布式锁、leader选举和写屏障(write barriers),来实现可靠的分布式协作。etcd集群是为高可用、持久化数据存储和检索而准备。
概念词汇
Raft ...
Go语言设计与实现
Go 语言设计与实现
2.1 编译过程
2.1.1 预备知识
抽象语法树
抽象语法树(Abstract Syntax Tree、AST),是源代码语法的结构的一种抽象表示,它用树状的方式表示编程语言的语法结构1。
指令集
x86 是目前比较常见的指令集,除了 x86 之外,还有 arm 等指令集,不同的处 ...
k8s的client-go的使用
学习地址:https://github.com/kubernetes/client-go
如果你要安装最新的需要的环境是: go1.16+ ,使用下面的命令安装:
go get k8s.io/client-go@latest
client-go 是用 Golang 语言编写的官方编程式交互客户端库,提供对 Kubernetes API server 服务的交互访问。它是 Kubernetes 的核心处理框架,k8s源码中已经集成了 ...
03. go-zero简介及如何学go-zero
目录一、go-zero简介及如何学go-zero1.go-zero官方文档2.go-zero微服务框架入门教程3.go-zero最佳实践4.学习资料二、go-zero环境搭建1.GO环境和Gopath的配置1.需要安装以下环境和依赖2.goctl安装3.其它依赖安装三、go-zero杀手锏goctl详细使用1.官方文档:2.开发准备工作3.编写API代码4.编写RPC代码5.编写Model代码五、API服 ...
GO后端开发+VUE实列
因为我是从java转到go,代码结构跟我之前用java的很像
在这里只浅显的实战运用,没有过多理论讲解
工作环境:IDE:Goland , Go 1.17.7 框架 Gin+Gorm ,前端VUE
这里不过多讲前端,可以到我的github或者gitee拉取
Go的安装配置
在官网下载完,安装后需要配置两个环境变量
一个是GOROOT,也就是Go安装的文件夹,注意不要定 ...
[已解决] 含gorm、sqlite3包的go程序构建失败 C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1
问题描述
gorm官方文档教程实例,构建出现错误。
C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1
没有import这些包的其他代码能够正常构建
import (
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
报错如下
PS L:\IT\Go\Codes\work\gorm> go run . &nbs ...
Go 1.18 系列篇(一):如何升级 Go 1.18 ?
在上周,Go 1.18 终于是发布了,在上一篇文章中,我在留言中说,接下来几天会把玩一下 Go 1.18 的新特性,并跟大家分享一下学习心得。
今天第一篇,先升级一下 Go 1.18 ,关于新特性,咱明天再开整~
Go 官方推荐的 Go 升级方法是先安装新版本的下载器,再使用下载器去安装新版本的 Go,总结一下就是如下三条命令
~ ➤ go i ...
构建 Go 应用 docker 镜像的十八种姿势
修炼背景
我夜以继日,加班加点开发了一个最简单的 Go Hello world 应用,虽然只是跑了打印一下就退出了,但是老板也要求我上线这个我能写出的唯一应用。
项目结构如下:
.
├── go.mod
└── hello.go
hello.go 代码如下:
package main
func main() {
println("hello world!")
}
并且,老板要求用 docker 部署 ...
🔥字节一面:go的协程相比线程,轻量在哪?
如题, 说到轻量级用户态线程,就要从操作系统的调度模型这个大背景 开始聊了。
1. 大背景:常规资源调度模型
调度说白了就是: 下马、换人、再上马跑, 资源就是马。
操作系统分为用户态和内核态(或者叫用户空间和内核空间), 内核态是一种特殊的调度程序,统筹有限的计算机硬件资源,例如协调CPU资源、分配内存资源、并且 ...
详解 Go 中的 rune 类型
Go语言中文网 2022-03-15 08:52
刚接触 Go 语言时,就听说有一个叫 rune 的数据类型,即使查阅过一些资料,对它的理解依旧比较模糊,加之对陌生事物的天然排斥,在之后很长一段时间的编程工作中,我都没有让它出现在我的代码里。
逃避虽然有用,但是似乎有些可耻,想要成为一名成熟、优秀的 Go 语言 ...
go smtp示例
书接上文邮件实现详解,这里我们及我们简单复习一下smtp的指令如下:
telnet smtp.163.com 25
[outpout]
ehlo dz45693
[outpout]
auth login
[outpout]
输入用户名base64
[outpout]
输入密码base64
mail from:<dz45693@163.com>
[outpout]
rcpt to:<dz45693@sina.com>
[outpout]
data
[outpout]
from:<dz45693@163.com>
...
Go语言从入门到精通
1-Go介绍和开发环境
1-开发环境-Go语言介绍
2-开发环境-Go环境搭建
3-开发环境-GOPATH和gomod
4-开发环境-编辑器选择和安装
5-开发环境-第一个HelloWorld
2-Go变量和基础数据类型
1-go基础-关键字和保留字
2-go基础-内置类型和内置函数
3-go基础-init函数和main函数
4-go基础-命令
5-go基础-运算符
6-go基础-变量和常量
7-g ...
惨,给Go提的代码被批麻了
hello大家好,我是小楼。
不知道大家还记不记得我上次找到了一个Go的Benchmark执行会超时的Bug?就是这篇文章《我好像发现了一个Go的Bug?》。
之后我就向Go提交了一个PR进行修复,本想等着代码被Merge进去,以后也可以吹牛说自己是个Go的Contributor,但事情并不顺利,今天就来分享一下这次失败的代码提交。
第一次提交
在 ...
go 中 sort 如何排序,源码解读
sort 包源码解读
前言
如何使用
基本数据类型切片的排序
自定义 Less 排序比较器
自定义数据结构的排序
分析下源码
不稳定排序
稳定排序
查找
Interface
总结
参考
sort 包源码解读
前言
我们的代码业务中很多地方需要我们自己进行排序操作,go 标准库中是提供了 sort 包是实现排序功能的,这里来看下生产级别 ...
go随机数
math/rand
crypto/rand
linux真随机数
参考资料
math/rand
math/rand实现了伪随机数算法,和其它的编程语言类似,操作逻辑都是先设置随机数种子,然后再获取随机数序列。这样每次生成的随机数序列都是不一样的。
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
rand.Seed(time.Now().UnixNano()) ...
Go语言之反射
一、反射的基本概念
(一)什么是反射
反射可以再运行时动态获取变量的各种信息,比如变量的类型、值等
如果时结构体变量,还可以获取到结构体本身的各种信息,比如结构体的字段、方法
通过反射,还可以修改变量的值、调用方法
不过使用反射,需要引入一个包:reflect
典型用法是用静态类型interface{}保存一个值,通过调 ...
.NET/JAVA/GO 固定时间窗口算法实现(无锁线程安全)
一.前言
最近有一个生成 APM TraceId 的需求,公司的APM系统的 TraceId 的格式为:APM AgentId+毫秒级时间戳+自增数字,根据此规则生成的 Id 可以保证全局唯一(有 NTP 时间同步),前两个字段好说,最后一个字段也不复杂,我的想法是按秒来进行自增。比如说1秒的时候,自增计数为100,在2秒的时候会重置为0,然后进行自增 ...
Go vs Java vs C# 语法对比
目录1. 说明2. 对比2.1 关键字(keywords)2.1.1 Go2.1.2 Java2.1.3 C#2.1.4 小结2.2 基本数据类型2.2.1 Go 基本数据类型2.2.2 Java 基本数据类型2.2.3 C# 基本数据类型2.2.4 小结2.3 值类型和引用类型2.3.1 Go 值类型和引用类型2.3.2 Java 值类型和引用类型2.3.3 C# 值类型和引用类型2.3.4 小结2.4 变量2.5 运算2.5.1 Go ...