自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

迈克 Let's Go

主要讲解Go语言和微服务实战相关内容。

  • 博客(336)
  • 资源 (4)
  • 收藏
  • 关注

原创 Go常见并发模式

文章目录一、Go语言并发的基础元素1.goroutine2.channel3.sync 包的同步原语4.多并发控制神器:Context二、常见并发模式Go语言实现1.for select 循环模式无限循环(监控狗)有限循环(for range select )2.select timeout 模式3.流水线模式(Pipeline)4.扇出和扇入模式5.未来模式(Futures)一、Go语言并发的基础元素goroutine、channel、sync 是并发编程中必不可少的元素,context标准包更是为

2021-01-14 10:36:28 1804 4

原创 Go语言并发实践

https://golang.google.cn/一、并发模型CSPCSP基本思想是:将并发系统抽象为channel和process两部分,二者相互独立,没有从属关系 ;channel用来传递消息,消息的发送和接收有严格的时序限制;process用于执行 。在Go语言中,channel就是通道 process就是goroutine 。Go语言调度模型goroutine的调度模型抽象出来三个实体:M P GM:machine:一个内核线程 P:processor Go执行一段代码的上下

2021-01-11 14:40:18 95

转载 Golang中defer、return、返回值之间执行顺序的坑

文章目录前言结论如何解释两种结果的不同:补充前言Go语言中延迟函数defer充当着 try…catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中,今天我们就来揭开它的神秘面纱!先来运行下面两段代码:A. 匿名返回值的情况package mainimport ( "fmt")func main() { fmt.Println("a return:", a()) // 打印结果为 a ret

2021-01-12 17:36:09 50

转载 Golang 中使用 JSON 时如何区分空字段和未设置字段?

https://learnku.com/go/t/49332几周前,我在使用 Golang 微服务,需要添加使用 JSON 数据的 CURP 操作的支持。通常,我会为实体创建一个结构体,该结构体中定义了所有字段以及 ‘omitempty’ 属性,如下所示type Article struct {Id string json:"id"Name string json:"name,omitempty"Desc string json:"desc,omitempty"

2021-01-12 11:54:31 47

原创 docker部署kong+konga

既然 Kong 以 Pod 的形式运行在 k8s 集群中,那么其本身需要对外暴露,这样外部流量才能进来,在本地可以 nodePort 或者 hostNetwork 对外提供服务,在云平台一般通过 LoadBalancer 实现https://blog.csdn.net/weixin_40497678/article/details/106148677helmwget https://get.helm.sh/helm-v3.4.1-linux-amd64.tar.gzistio安装Istio是 Se

2020-12-09 18:00:18 33

原创 阿里云服务器使用minikube构建开发服务

kubectl create -f user-service-deployment.yaml服务代码main.gopackage mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "

2020-12-09 10:43:38 83

原创 centos7安装minikube

1.dockerhttps://docs.docker.com/engine/install/centos/{sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-enginesudo yum install -y yum-utilssudo yum-config-mana

2020-12-08 17:48:22 43

原创 Go语言的新类型声明和类型别名的区别

文章目录简介定义新类型类型别名(定义类型的新名字)参考代码代码简介区分新类型声明和类型别名的不同之处,虽然简单,却也是容易忽视的地方,这里做个简单介绍。定义新类型type关键字用来声明一个新类型:type 类型名称 底层类型新类型和底层类型是不可以互相赋值的,即新类型和底层类型是两种不同的类型。类型别名(定义类型的新名字)type 新名称 = 底层类型这条语句是给底层类型起了个新的名字,他们是等价类型,可以认为是为底层类型定义了个别名。这俩类型定义的变量可以互相赋值。其中rune

2020-09-09 18:18:48 97

原创 Go语言并发读写大文件样例

文章目录小文件读取按块读取大文件并发读写文件样例小文件读取package mainimport ( "fmt" "io/ioutil" "os")func main() string { f, err := os.Open("file/test") if err != nil { fmt.Println("read file fail", err) return "" } defer f.Close() fd, err := ioutil.ReadAll(f) if

2020-09-08 09:58:38 291

原创 Go语言字符串拼接:strings.Builder和bytes.Buffer如何选择

文章目录标题字符串拼接性能差异选择标题字符串拼接package mainimport ( "bytes" "fmt" "strings")func main() { var str = []string{"aaa", "bbb", "ccc", "ddd"} fmt.Println(useStrings(str)) fmt.Println(useBytes(str))}func useStrings(input []string) string

2020-09-07 17:04:08 198

原创 Go语言中使用JWT作为授权令牌

官网JWT官网简介JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。使用场景Authorization (授权) :这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。Information

2020-09-03 09:24:05 96

原创 Go语言简介

官网地址Go之所以叫Go,是想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物, 它的中文名叫做囊地鼠,他们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。...

2020-09-02 18:18:50 64

原创 哪些场景适合使用索引覆盖来优化SQL

全表count查询优化select count(age) from user;使用索引覆盖优化:创建age字段索引列查询回表优化select id,age,name from user where age = 10;使用索引覆盖:建组合索引idx_age_name(age,name)即可分页查询:select id,age,name from user order by age limit因为name字段不是索引,所以在分页查询需要进行回表查询使用索引覆盖:建组合索引idx_age_nam

2020-07-24 15:22:48 108

转载 RabbitMQ基础概念详细介绍

https://www.jianshu.com/p/e55e971aebd8引言你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。RabbitMQ简介AMQP,即Advanced Mess

2020-07-17 17:41:38 57

转载 MySql下实现先排序后分组 5.7出现的问题

https://blog.csdn.net/wangxi_xixi/article/details/82981533https://blog.csdn.net/lglaljj123/article/details/79864188

2020-05-18 11:58:46 248

原创 面试必问:Golang高阶-Golang协程实现原理

https://www.cnblogs.com/nima/p/11751393.html

2020-03-25 18:08:25 180

原创 MySQL基础知识

1.基础知识decimal能存储比bigint更大的整数;float和double只能做近似计算经常变更的短字符串用char更好更高效。text和blob查询会使用临时表,导致严重的性能开销。 单独查询或者单独垂直分表timestamp y-m-d h:i:s 比datetime空间效率更高。数据库建模 powerdesigner 重要,不要只写一个数据字典mysql的瓶颈是磁盘IO;...

2020-03-24 16:27:45 91

转载 mysql中的回表查询与索引覆盖

了解一下MySQL中的回表查询与索引覆盖。回表查询要说回表查询,先要从InnoDB的索引实现说起。InnoDB有两大类索引,一类是聚集索引(Clustered Index),一类是普通索引(Secondary Index)。InnoDB的聚集索引InnoDB聚集索引的叶子节点存储行记录,因此InnoDB必须要有且只有一个聚集索引。1.如果表定义了PK(Primary Key,主键),那么...

2020-03-24 15:31:35 86

原创 Go语言的并发简单总结

Goexit结束当前goroutine,会调用defer, 不会产生panic1.6.扇入扇出 fan in\fan out1.7 通知退出机制通知退出机制是学习使用context库的基础Lable:for{select {case ch<-rand.Int():case <-done:break Lable}}2.并发范式2.1 生成器2.2 管道输入输...

2020-03-20 14:26:31 75

原创 我的Chrome标签

https://studygolang.com/pkgdochttps://github.com/lpxxn/gomicrorpchttps://learnku.com/go/t/36973https://cloud.tencent.com/developer/section/1140383https://blog.csdn.net/qq_41187256/article/details/...

2020-03-20 13:46:13 77

原创 Go语言基础漫谈

引导程序整体结构的 8 个关键字package 定义包名import 导入包名const 常量声明var 变量声明func 函数定义defer 延迟执行go 并发语法糖return 函数返回声明复合数据结构的 4 个关键字struct 定义结构类型interface 定义接口类型map 声明或创建 map 类型chan 声明或创建通道类型控制程序结构的 13 个关键字...

2020-03-19 10:50:40 70

原创 Go语言的接口简介

接口接口可以嵌入另一个接口类型的匿名字段。编译器会自动展开。接口带的是方法声明,带方法名,方法名是接口类型的一部分。接口的命名一般以 er 结尾。单独声明接口变量没有意义,只有被初始化的具体类型才有意义、接口的意义:我们内部的某类型需要返回回去,但是一部分方法和属性不想对外暴露。我们可以声明一个希望暴露的接口返回回去。拿到的返回值就只有接口的方法可以使用。属性字段和没有暴露的方法不可被访...

2020-03-19 10:49:30 69

转载 Go语言Interface作为struct field,谈谈结构体中的匿名接口

Go语言中通过组合(composite)实现类似继承(extends)和重写(override)的功能,大家可能平时用的比较多的是struct中匿名struct的写法,有没有见过struct中匿名接口(anonymous interface)的写法呢?Interface这个接口直接作为struct中的一个匿名字段,在标准库sort包中就有这种写法:type Interface interfac...

2020-03-19 10:33:38 227

原创 Go语言测试

*_test.go单元测试函数{PASS/FAIL 测试函数的名字必须以Test开头,可选的后缀名必须以大写字母开头func TestSin(t testing.T) { / … */ }参数t用来报告测试失败和附加的日志信息go test如果没有参数指定包 则采用当前目录对应的包,同go build错误信息一般是:f(x) = y, want z-v 打印每个测试函数的名字和运行...

2020-03-16 11:28:47 92

原创 GORM常用方法

gorm{ // 获取通用 sql.DB 并使用其方法db.DB()// Pingdb.DB().Ping()// SetMaxIdleCons 设置连接池中的最大闲置连接数。db.DB().SetMaxIdleConns(10)// SetMaxOpenCons 设置数据库的最大连接数量。db.DB().SetMaxOpenConns(100)// SetConnMax...

2020-03-16 10:09:14 633

原创 Uber的Go语言指南

1.接口实质上在底层用两个字段表示:一个指向某些特定类型信息的指针。您可以将其视为"type"。数据指针。如果存储的数据是指针,则直接存储。如果存储的数据是一个值,则存储指向该值的指针。如果希望接口方法修改基础数据,则必须使用指针传递。2.使用值接收器的方法既可以通过值调用,也可以通过指针调用。值接收器实现的接口,值和指针都可用。指针接收器实现的接口,只能指针可用,值会编译失败。3....

2020-03-16 10:08:07 91

原创 kafka

https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/下载地址,别下载srcbin/zookeeper-server-start.sh -daemon config/zookeeper.propertiesbin/kafka-server-start.sh -daemon config/server.properties创建topicbin/...

2020-03-13 15:09:31 68

转载 领域驱动设计(DDD)-基础思想

领域驱动设计(DDD)-基础思想 - Ebiubiu的文章 - 知乎https://zhuanlan.zhihu.com/p/109114670

2020-03-05 15:07:30 126

转载 这可能不是你认识的Go语言

不要对Go并发函数的执行时机做任何假设请看下列的列子:import ( "fmt" "runtime" "time")func main(){ names := []string{"lily", "yoyo", "cersei", "rose", "annei"} for _, name := range names{ go func(){ fmt.Println(na...

2020-03-03 17:28:22 68

转载 Go语言知识点四十二章经

内存分配发生在运行时,编译后的机器码不使用变量名而是直接使用内存地址访问目标数据,所以编码阶段采用易于阅读的变量名惯例建议以组的方式整理多行变量定义 var {x,y int } type{ xxx }简短声明一般用于函数多返回值,以及if for switch等语句中定义局部变量未使用的局部变量会编译出错,全局变量不报错常量实在预处理阶段展开成指令数据,变量是在运行期分配存储内存.(所...

2020-03-03 15:13:33 87

转载 Go语言最佳实践

这些最佳实践更像是 Go 语言社区内部发展过程中积累的一些工程经验和共识,遵循这些最佳实践能够帮助我们写出符合 Go 语言『味道』的代码,我们将在这一小节覆盖以下的几部分内容:目录结构;模块拆分;显式调用;面向接口;这四部分内容是在社区中相对来说比较常见的约定,如果我们学习并遵循了这些约定,同时在 Go 语言的项目中实践这几部分内容,相信一定会对我们设计 Go 语言项目有所帮助。目录结...

2020-02-28 15:31:55 211

转载 Go Modules 终极入门

概要Go modules 是 Go 语言中正式官宣的项目依赖解决方案,Go modules(前身为vgo)于 Go1.11 正式发布,在 Go1.14 已经准备好,并且可以用在生产上(ready for production)了,Go 官方也鼓励所有用户从其他依赖项管理工具迁移到 Go modules。而 Go1.14,在今天终于正式发布,Go 官方亲自 “喊” 你来用:因此在今天这篇文章中...

2020-02-28 14:52:51 121

转载 undefined: grpc.SupportPackageIsVersion6 和 undefined: grpc.ClientConnInterface 解决办法

问题表现编译protobuf的 .pb.go文件时报错,如 undefined: grpc.SupportPackageIsVersion6 或 undefined: grpc.ClientConnInterface和这个贴子的表现一样,https://github.com/grpc/grpc-go/issues/3347解决办法方法1:升级grpc到1.27以上即可,但是如果...

2020-02-24 11:11:01 3979

原创 全球公认最健康的作息时间表!全是知识点

丑时养生:熟睡保肝丑时 1:00~3:00 肝经人体状况:左为肝,右为肺,肝在东边属于青龙,肺西边为白虎,这两个在中医里是最难治的病。丑时肝经最旺,是肝脏修复的最佳时段。“肝主藏血”,人的思维和行动要靠肝血的支持,废旧的血液需要淘汰,新鲜的血液要产生,这种代谢通常都是在肝经最旺的丑时完成。如果不注意养肝,就会导致肝炎、大三阳、小三阳等。养生之道:此时必须进入熟睡状态,让肝脏得到最充足的能量。...

2020-02-18 18:05:10 466

原创 Go语言的并发

原子操作就是并发编程中“最小的且不可并行化”的操作。1.一般情况下,原子操作都是通过“互斥”访问来保证的sync.Mutex用互斥锁来保护一个数值型的共享资源,麻烦且效率低下。sync/atomic 包对原子操作提供了丰富的支持sync/atomic 包对基本的数值类型及复杂对象的读写都提供了原子操作的支 持。 atomic.Value 原子对象提供了 Load 和 Store 两个原...

2020-02-14 10:33:10 81

原创 Go语言的函数、方法和接口

函数在Go语言中,函数是第一类对象,我们可以将函数保持到变量中。具名函数是匿名函数的一种特例。当匿名函数引用了外部 作用域中的变量时就成了闭包函数,闭包函数是函数式编程语言的核心。defer 语句延迟执行了一个匿名函数。因为这个匿名函数捕获了外部函数的 局部变量 ,这种函数我们一般叫闭包。传参:Go语言中,如果以切片为参数调用函数时,有时候会给人一种参数采用了传引用的 方式的假象:因为...

2020-02-13 15:47:50 74

原创 Go语言中数组、字符串、切片之间的关系

Go语言中,数组、字符串、切片是密切相关的数据结构。简介Go语言的赋值和函数传参,除了闭包是引用的方式对外部变量访问外,其他赋值和函数传参都是 值传递的方式。它们底层原始数据有相同的内存结构。数组是一种值类型,数组本身的赋值和函数传递都是以整体复制的方式处理的。字符串底层数据对应的是字节数组,但是有只读属性;字符串赋值只是复制了数据地址和对应的长度,不会导致底层数据的复制。切片的结构...

2020-02-13 15:17:53 81

原创 Go语言的100个常识

1 channel实现CSP模型2 内存分配:tcmalloc3 动态库buildmode功能???4 缺乏真正意义上的调试器吗???5 依赖包管理问题???6 编译器将未使用的局部变量定义当作错误7 函数可以返回函数类型func test() func(int) { return func(x int) { println("x:", x) }}8 defer定义延迟调用...

2020-01-20 10:35:20 103

原创 grpc报错

1.消息体太小error: “grpc: received message larger than max (6115095 vs. 4194304)”message: “grpc: received message larger than max (6115095 vs. 4194304)”s := grpc.NewServer(grpc.MaxMsgSize(size), grpc.Ma...

2020-01-20 10:34:51 172

原创 seaweedfs

{FastDFS它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。Seaweedfs (https://github.com/chrislusf/seaweedfs)Seaweedfs 的设计原理是基于 Facebook 的一篇图片存储系统的论文 Facebook-Haystack 说到这个,毛剑也在依这个论文写bfs, 正在开发中,可以跟看从小到大一步...

2020-01-20 10:34:25 167

MYSQL基础知识,一些常用问题

MYSQL基础知识,一些常用问题

2020-03-24

Redis集群配置文件

Redis集群配置文件,包含了三个主节点,三个从节点的配置文件,该配置是在docker中运行,有完整的docker-compose.yml文件,只要修改映射的宿主机的路径为你自己的路径。然后直接docker-compose up既可以完成环境启动。

2019-12-27

证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用

证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。证书文件,cert.txt包含了制作的过程,下载下来解压就可以直接使用。

2019-08-13

grpctlsgrpctlsgrpctlsgrpctls

grpctlsgrpctls

2018-12-28

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除