【go基础】协程管理

从一个错误案例开始起因是在工作中看到一段代码,感觉是程序遇到异常而卡住的原因,起了两个协程,其中一个等待另一个完成后开始,二者通过channel进行消息传递。后一个协程在完成时使用了goto语句。程序最后为select{}永久卡死,等待前面启动的两个协程去跑完就完事了。 原来的代码(铁有问题,不能用在生产上): 123456789101112131415161718 ticker := ti...

【Go基础】分布式事务

从几个缩写讲起首先,提到事务,一般指的是数据库的事务,指逻辑上的一组操作,要么都执行,要么都不执行。 ACID,指的是数据库在写入或者更新资料时,为了保证交易正确可靠,要具备的4个特性: 缩写 英文单词 中文解释 说明 A atomicity 原子性 最小执行单位,all or nothing C consistency 一致性 执行前后一致 I isolation 隔离...

【Go基础】环境搭建与开发

环境第1步:下载go(下载地址) 第2步:配置环境变量 GOROOT:go的安装目录 GOPATH:go的工作目录(全局),一般给文件夹起名叫GoWorkstation、Go_WorkSpace等。 src:存放源代码 pkg:存放依赖包 bin:存放可执行文件 GOPATH 是 Go 早期(Go 1.11 之前)管理依赖和项目代码的核心环境变量,早期go build、go run或...

【Go基础】错误处理

基本认识 在Go中,将错误当成值来进行处理,强调判断错误和处理错误,不支持try/catch捕获异常。 Go选择使用Error而非Exception来进行错误处理。 一般把错误作为函数或方法的最后一个返回值。 Error接口使用error接口表示错误类型。该接口只有一个Error()方法,返回描述错误信息的字符串。 123type error interface { Err...

【Go基础】并发编程基本概念

并发编程基本概念串行、并发与并行 串行:我们都是先读小学,小学毕业后再读初中,读完初中再读高中。 并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。 并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。 进程、线程和协程 进程(process):程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。 线程(thread):操作系统基于进程开启的轻量级...

【Go基础】垃圾回收演进 三色标记法

GO1.3标记清除,整体需要STW:1.暂停,找到可达和不可达对象,2. 标记可达对象,3. 清除未标记对象,4. 结束暂停 GO1.5三色标记法,堆启动写屏障,栈不启动,全部扫描一次后,需要重新扫描栈(STW),效率低 如果没有STW,对象丢失的2个条件: 黑色对象指向白色对象(白色挂在黑色下面) 灰色对象与其可达白色对象之间遭到破坏(灰色也丢失了该白色) 屏障机制,保障对象不丢失的2...

【Go基础】Go入门与实践资源帖

看到好的持续更新…… Go系统教程 从语法讲起:李文周博客 七天快速上手项目 Go测试驱动开发博客 孔令飞项目开发实战课程,孔令飞图文教程 《Go 语言高级编程》书籍 Go算法刷题模板 Go实战项目 KV系统 crawlab分布式爬虫平台 seaweedfs分布式文件系统 Cloudreve云盘系统 gfast后台管理系统(基于Go Frame) alist多存储文件列表(基于Gin、Re...

【Go基础】微服务概念与演进

微服务概念与演进巨石架构到微服务的演进传统网页应用虽然进行了模块化设计,但是最终仍然是打包成一个war包进行部署,启动慢,无法拓展,可靠性很低。 什么是微服务是面向服务的架构模式(SOA)的最佳实践。定义:围绕业务功能构建的,服务关注单一业务,服务间采用轻量级的通信机制,可以全自动独立部署,可以使用不同的编程语言和数据存储技术。微服务架构通过业务拆分实现服务组件化,通过组件组合快速开发系统,...