golang并发编程
摘抄自极客时间课程
go并发编程实战课:https://b.geekbang.org/member/course/intro/100061801
检查程序的工具:
race detector
vet工具
一、开篇词
学习 Go 并发编程,有哪些困难? 那学习 Go 并发会有哪些困难呢?
主要总结为 5 大问题。
在面对并发难题时,感觉无从下手,不知道该用什么并发原语来解决问题。
如果多个并发原语都可以解决问题,那么,究竟哪个是最优解呢?比如说是用互斥锁,还是用 Channel。
不知道如何编排并发任务。并发编程不像是传统的串行编程,程序的运行存在着很大的不确定性。这个时候,就会面临一个问题,怎么才能让相应的任务按照你设想的流程运行呢?
有时候,按照正常理解的并发方式去实现的程序,结果莫名其妙就 panic 或者死锁了,排查起来非常困难。
已知的并发原语都不能解决并发问题,程序写起来异常复杂,而且代码混乱,容易出错。
怎么提升 Go 并发编程能力?
学习这件事儿,最怕的就是不成体系,即使知识点之间是彼此独立的,也必定存在着联系。我们要做的,就是找出逻辑关系,拎出知识线。关于 ...
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:// ...
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 ...
Gin
https://www.liwenzhou.com/posts/Go/gin/
中文文档
一、下载与示例
下载并安装Gin:
1go get -u github.com/gin-gonic/gin
例子:
1234567891011121314151617181920package mainimport ( "github.com/gin-gonic/gin")func main() { // 创建一个默认的路由引擎 r := gin.Default() // GET:请求方式;/hello:请求的路径 // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数 r.GET("/hello", func(c *gin.Context) { // c.JSON:返回JSON格式的数据 c.JSON(200, gin.H{ "message": "Hello world!", ...
leetcode hot 100 刷题(go语言版)
入口
Cookbook
codetop
ps: 空间复杂度不需要考虑入参和返回值
通用定义
子串(substring):原始字符串的一个连续子集;
子序列(subsequence):原始字符串的一个子集。
空间复杂度:注意是排除入参出参的额外空间
哈希
1. 两数之和
查看代码 123456789101112131415func twoSum(nums []int, target int) []int { visitedNumMap := make(map[int]int, len(nums)) // [num]numIndex ans := make([]int, 2) for curNumIndex, curNum := range nums { anotherPartNum := target - curNum if anotherPartNumIndex, ok := visitedNumMap[anotherPartNum]; ok { ans[0], ans[1] = curNumIndex ...
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,轻量级 ...
如何学习新技术
怎么去学习新技术
何时需要学习新技术
遇到一个新的问题、新的问题,首先我们会看看现有的技术能否解决,其次我们就需要学习新的技术。
跳槽,学习新的技术。
怎么学习新的技术
学习新技术:
(1)原理
(2)基本语法
快速入门案例,会基本使用,不需要涉及技术细节
讨论这个新技术的细节
(1)怎么使用更规范
(2)有什么使用的陷阱
(3)使用时,有什么注意事项
……
Go学习路线
等我称为go语言大佬再更新,啊哈哈……
amis
官方仓库:baidu/amis: 前端低代码框架,通过 JSON 配置就能生成各种页面。 (github.com)
官方文档:中文文档
官方可视化编辑器:可视化编辑器
B站教学视频:Amis 前端低代码框架 百度出品 基础简介(1)_哔哩哔哩_bilibili
这玩意需要会json,不了解的先学一下语法
低代码平台amis学习 三:发送网络请求并回显响应内容 - 我是冰霜 - 博客园 (cnblogs.com)
概念
接下来我要用我的话来说一下这个东西,可能有些说的不太准确,主要是自用,细节还是看文档
背景:
低代码是什么?
低代码(Low-Code)是一种软件开发方法,旨在通过最小化手动编码的需求,使开发人员能够更快速地构建和部署应用程序。低代码平台提供了一套可视化的工具和组件,使开发人员可以通过拖放、配置和设置属性来创建应用程序,从而从头开始编写大量的代码。低代码平台的主要目标是降低开发应用程序所需的技术复杂度,从而加快开发周期并减少这种方法适用于那些需要快速响应业务需求、构建原型、开发内部工具或简化业务流程的项目。
可以想象自己正在建造一座房子。传统的方法是从头开始打 ...
