golang并发编程
Pending
golang注意事项
channel
如果channel关闭后,再操作会怎么样?
查看解析 当一个 channel 被关闭后,再从中取值会有特定的行为。下面是关闭 channel 后的行为总结:
1、关闭后的读取行为
从已关闭的 channel 读取数据:
如果 channel 中还有未取出的数据,可以继续读取这些数据。
一旦 channel 中的数据被取完,再次读取时,将返回该类型的零值,并且读取操作不会阻塞。
例如,如果 channel 类型是 int,则会返回 0;如果是 string,则返回 ""(空字符串)。
检测 channel 是否已关闭:
在接收值时,可以通过第二个返回值来判断 channel 是否已关闭。当 channel 被关闭并且所有数据已经取完时,第二个返回值为 false。
1v, ok := <-ch
v 是接收到的值。
ok 是一个布尔值,当 ok == false 时,表示 channel 已经关闭且没有更多的数据可接收。
2、关闭后的发送行为
向已关闭的 channel 发送数据:
如果你尝试向一个已关闭的 c ...
golang密码学
文档链接
文档链接2
视频链接
一、密码
1.1 发送者、接收者和窃听者
请想象一个Alice向Bob发送电子邮件的场景。在这个场景中,发出邮件的Alice称为 发送者(sender) ,而收到邮件的Bob则称为 接收者(receiver) 。
在讲解发送者、接收者的概念时,用邮件这个例子会比较便于理解,但实际上发送者和接收者这两个术语的使用范围并不仅仅局限于邮件。当某个人向另一个人发送信息时,发出信息的人称为发送者,而收到信息的人称为接收者。另外,被发送的信息有时也统称为 消息(message) 。
Alice向Bob发送邮件:
邮件是通过互联网从Alice的计算机发送到Bob的计算机的。在发送邮件时,邮件会经过许多台计算机和通信设备进行中转,在这个过程中,就存在被恶意窃听者(eavesdropper)偷看到的可能性。
Eve(窃听者)看到邮件的内容
窃听者Eve并不一定是人类,有可能是安装在通信设备上的某种窃听器,也可能是安装在邮件软件和邮件服务器上的某些程序。
尽管邮件内容原本应该只有发送者和接收者两个人知道,但如果不采取相应的对策,就存在被第三方知道的风险。
...
Prometheus
B站视频
Prometheus 是一个生态。
1. 概述
Prometheus Server,主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。
client libraries,用于检测应用程序代码的客户端库。
push gateway,用于批量,短期的监控数据的汇总节点,主要用于业务数据汇报等。
exporters,收集监控样本数据,并以标准格式向Prometheus 提供。例如:收集服务器系统数据的node_exporter,收集MySQL监控样本数据的是MySQL exporter 等等。
alertmanager,用于告警通知管理。
Pushgateway 是Prometheus 生态中一个重要工具,使用它的原因主要是:
Prometheus 采用pull模式,可能由于不在一个子网或者防火墙原因,导致Prometheus 无法直接拉取各个target 数据。
在监控业务数据的时候,需要将不同数据汇总,由Prometheus 统一收集。
当exporter不能满足需要时,也可以通过自定义(python、shell、java)监控我们想要 ...
go包管理
https://cnblogs.com/songhaibin/articles/15512953.html
1. 三种包管理方式
使用go path问题
代码开发必须在go path src目录下,不然,就有问题。
依赖手动管理
依赖包没有版本可言
从这个看, go path不算包管理工具
govendor
解决了包依赖,一个配置文件就管理
依赖包全都下载到项目vendor下,每个项目都把有一份。拉取项目时,开始怀疑人生。
go mod介绍
go modules 是 golang 1.11 新加的特性。现在1.12 已经发布了,是时候用起来了。Modules官方定义为:
模块是相关Go包的集合。modules是源代码交换和版本控制的单元。 go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
2. go mod基本说明
下面设置go mod和go proxy
12go env -w GO111MODULE=ongo env -w GOPROXY=https:// ...
Gin
pending
Go‘s 数据结构
教程
Go实现栈与队列
一、链表
单链表:
1234type LinkNode struct { val int next *LinkNode }
循环链表:
1234type Ring struct { next, prev *Ring // 前驱和后驱节点 Value interface{} // 数据}
初始化循环链表:
123456// 初始化空的循环链表,前驱和后驱都指向自己,因为是循环的func (r *Ring) init() *Ring { r.next = r r.prev = r return r}
数组实现链表:【静态链表】
12345678910111213141516171819type Value struct { Data string NextIndex int64}var array [5]Value // 五个节点的数组array[0] ...
SQLBoiler
SQLBoiler入门指导1-最好用的Go ORM框架
SQLBoiler官方文档翻译–最好用的Go ORM框架
SQLBoiler 是一个根据数据库表生成对应的 Go ORM 代码的工具。
它是一个数据库先行的 ORM 框架,也就是说你需要先设计你的数据库,而不是像 gorm 那样先设计 struct。
1. 环境
这里使用 MySQL 作为数据库,其他数据库配置和依赖可能会有所不同。
环境要求:
Go 1.13以上
表名列名使用蛇形命名法snake_case
蛇形命名法
特点
全部小写:所有字母都使用小写。
单词间隔:单词之间使用下划线(_)来分隔。
数据库表结构
123456789CREATE TABLE `user` ( `id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT, `username` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL, `password` varchar(64) CHARACTE ...
gRPC
官方中文文档
视频教学
视频教学2
什么是gRPC
概念:
序列化:将数据结构或对象转换成二进制串的过程
反序列化:将在序列化过程中所产生的二进制串转换成数据结构或者对象的过程
env:
grpc和protobuf
1go get google.golang.org/grpc
1brew install protobuf
protobuf配套go语言的代码生成工具,因为这些文件在安装grpc的时候已经下载下来了,所以使用install即可。
1go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
1go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
1. proto文件编写
模版:
123456789101112131415syntax = "proto3";option go_package = ".;service";service SayHello { rpc Sa ...
go基础学习
a tour of go
golang-china/gopl-zh: :books: Go语言圣经中文版 (github.com) → Go语言圣经 - Go语言圣经 (gopl-zh.github.io)
【尚硅谷】Golang入门到实战教程丨一套精通GO语言_哔哩哔哩_bilibili
https://www.alipan.com/s/1YRzZZ8szDX 提取码: 1fw8
Go语言的特点:
Go语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率,使用一个表达式来形容 Go语言:Go = C + Python,说明 Go语言既有C静态语言程序的运行速度,又能达到 Python动态语言的快速开发。
从C语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型调用参数传值,指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。
引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。
垃圾回收机制,内存自动回收,不需开发人员管理
天然并发
(1) 从语言层面支持并发,实现简单
(2) goroutine,轻量级 ...