go 49 分布式事务 1 channel 6 goroutine 8 map 2 GMP 1 值拷贝 2 垃圾回收 3 设计模式 8 并发编程 5 singleFlight 1 waitgroup 1 go-zero教程 8 docker-compose 7 etcd 2 服务注册 1 服务发现 1 prometheus 1 grafana 1 服务监控 1 分布式锁 1 链路追踪 1 redis 3 单元测试 1 消息队列 1 socket编程 1 前端 1 grpc 3 1 工具 1 mysql 1 命令行 1 answer 1
技术

推荐一本好书100 go mistakes

在你的Go代码中发现你甚至不知道自己正在犯的错误,并通过避免常见的错误和陷阱来提高你的生产力。100个Go错误以及如何避免它们向您展示了如何:躲避Go开发者最常犯的错误构建和组织您的Go应用程序有效地...

继续阅读
技术

goroutine调度

Go 使用称为 goroutine 的用户级线程,它比内核级线程更轻且更便宜。 例如,创建一个初始 goroutine 将占用 2KB 的堆栈大小,而内核级线程将占用 8KB 的堆栈大小。 还有,goroutine 比内...

继续阅读
技术

segmentfault+answer项目全解析(一):跑通本地环境

answer项目是、一个基于开源知识的问答社区软件。您可以使用它来快速建立您的问答社区,以获得产品技术支持、客户支持、用户交流等。answer是一个比较完整的项目,后端使用的golang,特别适合想学 segmentfa...

继续阅读
技术

etcd实现分布式锁

* 需要保证互斥访问(分布式环境需要保证不同节点、不同线程的互斥访问) * 需要有超时机制,防止锁意外未释放,其他节点无法获取到锁;也要保证任务能够正常执行完成,不能超时了任务还没结束,导致任务执行一般被释放锁 * 需要...

继续阅读
技术

go值拷贝

概念值类型值类型的数据,默认全部都是深复制,Array、Int、String、Struct、Float,Bool。引用类型引用类型的数据,返回的是值的地址,指针,切片,channel,interfac go中的值拷贝 值...

继续阅读
技术

go-GMP

* G — 表示 Goroutine,它是一个待执行的任务; * M — 表示操作系统的线程,它由操作系统的调度器调度和管理; * P — 表示处理器,它可以被看做运行在线程上的本地调度器; 协程调度,工作窃取...

继续阅读
技术

分布式事务

分布式事务什么是本地事务ACID原子性:是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做;如果事务中一个SQL语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态。TCC,saga,可靠事...

继续阅读
技术

go堆栈逃逸分析垃圾回收

堆栈一般堆栈栈一般由操作系统来分配和释放,堆由程序员通过编程语言来申请创建与释放。栈用来存放函数的参数、返回值、局部变量、函数调用时的临时上下文等,堆用来存放全局变量。我们可以这样理解数据存放的规则: 逃逸分析,垃圾回收...

继续阅读
技术

go-map

当查询map["name"]的时候,通过hash函数获取当前key的哈希,通过当前key的哈希获取到对应的正常桶bmap结构的b 如果正常桶没找到,找关联的溢出桶,如果没有关联直接返回nil,如果有关联了还是没找到,直接...

继续阅读
技术

singleFlight源码解析

SingleFlight作用是将并发请求合并成一个请求,以减少对下层服务的压力。应用场景大量的请求同时过来,查询一个已经失效的缓存,导致大量请求打到数据库(缓存击穿)如何使用?这个时候就需要使用singleFlight合...

继续阅读
技术

go select原理及使用场景

go select原理。类似c语言的多路复用,可以同时监听多个channel。当有channel可读可写之前会一直阻塞。两个 `case` 都是同时满足执行条件的,如果我们按照顺序依次判断,那么后面的条件永远都会得不到执...

继续阅读
技术

设计模式6原则之:单一职责原则

概念一个类或者模块只负责完成一个职责(或者功能)理解不要设计大而全的类,要设计粒度小、功能单一的类一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一。单一职责原则...

继续阅读
技术

go defer运行机制

概念Go语言的defer会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。现象defer先进后出packagemainimport"fmt"f defer闭包,预...

继续阅读
技术

go panic和recover

概念panic能够改变程序的控制流,调用panic后会立刻停止执行当前函数的剩余代码,并在当前Goroutine中递归执行调用方的defer;recover可以中止panic造成的程序崩溃。它是一个只 recover必须...

继续阅读
go-zero教程

go-zero docker-compose 搭建课件服务(一):编写服务api和proto

go-zero docker-compose 搭建课件服务(一):编写服务api和proto 手把手用go搭建微服务,微服务框架...

继续阅读
go-zero教程

go-zero docker-compose 搭建课件服务(二):编写courseware rpc服务

1、创建modelMySQL中创建数据库createdatabasego_zero_coursewaredefaultcharactersetutf8mb4collateutf8mb4_unicode 手把手用go搭建微...

继续阅读
go-zero教程

go-zero docker-compose 搭建课件服务(三):编写courseware api服务

1、生成API相关文件#到之前创建的courseware/api目录下goctlapigo-apicourseware.api-dir.-stylegozero2、courseware/api/etc 手把手用go搭建微...

继续阅读
go-zero教程

go-zero docker-compose 搭建课件服务(四):生成Dockerfile并在docker-compose中启动

1、目前的目录文件结构目前只是创建好了courseware服务,这一章节我我们先在docker-compose跑通课件服务.├──courseware│  ├──api│  │  ├──coursew 手把手用go搭建微...

继续阅读
go-zero教程

go-zero docker-compose 搭建课件服务(五):完善user服务

1、生成model到项目根目录下创建model目录,并新建user.sqlmkdiruser/rpc/modeltouchuser/rpc/model/user.sqlCREATETABLE`user 手把手用go搭建微...

继续阅读
go-zero教程

go-zero docker-compose 搭建课件服务(八):集成jaeger链路追踪

1、链路追踪一个外部请求需要内部若干服务的联动响应,这时候完整的调用轨迹将跨越多个服务,同时包括服务间的网络传输信息与各个服务内部的调用堆栈信息。追踪的主要目的是排查故障,如分析调用链的哪一部分、哪个 手把手用go搭建微...

继续阅读