自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 「容器管理系统」 3. 初始化配置和日志监控

项目框架初始配置,为了后面的开发做铺垫,下一节,就要开始正式的项目功能开发了,尽情期待…在第一篇开篇文章中,咱们已经选用了。包使用的是 go-tools。的全局中间件,创建一个。包,详细用法自行查阅…

2023-10-18 16:02:14 203

原创 「容器管理系统」 1. 开篇:框架选型和环境搭建

目前开源的容器管理项目只是单纯的管理容器,功能比较单一,业务功能复杂时,需要维护的可视化应用比较繁杂,因此,该项目想法由此而生,目的就是想实现一个。之前也写过几个开源项目,但是都是以学习为目的,所以那些项目都是未完成搁置状态,以后会慢慢的完善的。,不只是单一容器管理,还包含一些云原生需要的一些功能,实现一个系统管控所有的终极系统。上面的功能只是初步构思,后面会完善一些更加便于操作的功能…等,琳琅满目,各有各的好,这里咱们不对比框架的优缺点。,后面慢慢往后延伸,希望可以实现上面所说!

2023-09-17 15:09:49 170

原创 Go Mutex 错过后悔的重要知识点

go 的 Mutex 实现中,state 字段是一个 32 位的整数,不同的位记录了四种不同信息,在这种情况下, 只需要通过原子操作就可以保证一次性实现对四种不同状态信息的更改,而不需要更多额外的同步机制。

2023-07-05 10:25:30 202

原创 如何正确使用 goroutine ?

在中我们要实现并发编程的时候,我们通常需要自己维护一个线程池,并且需要自己去包装一个又一个的任务,同时需要自己去调度线程执行任务并维护上下文切换,这一切通常会耗费程序员大量的心智。那么能不能有一种机制,程序员只需要定义很多个任务,让系统去帮助我们把这些任务分配到上实现并发执行呢?语言中的就是这样一种机制,的概念类似于线程,但 是由Go的运行时()调度和管理的。程序会智能地将 中的任务合理地分配给每个。语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。在语言编程中你不需

2023-06-28 16:44:14 211

原创 go channel 详解

在Go语言中,使用goroutine单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。

2023-06-28 16:39:34 542

原创 三分钟彻底弄懂什么是分布式和微服务架构

微服务是基于分而治之的思想演化出来的。过去传统的一个大型而又全面的系统,随着互联网的发展已经很难满足市场对技术的需求,于是我们从单独架构发展到分布式架构,又从分布式架构发展到SOA架构,服务不断的被拆分和分解,粒度也越来越小,直到微服务架构的诞生。微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的。

2023-02-01 11:33:59 515 1

原创 go-zero 成长之路—微服务电商实战系列(八、jwt鉴权)

JWT

2022-10-24 08:33:06 768

原创 go-zero 成长之路—微服务电商实战系列(七、并发处理工具MapReduce的使用)

go-zero的api服务需要通过api文件进行定义。其中返回值的类型定义中并没有支持time.Time的类型。那问题来了:如果在返回值中需要时间的结果,针对sqlx和gorm模型定义的time.Time的时间类型应该怎么处理呢?接下来咱们就以产品服务版块中的产品列表的返回结果来说明如何解决的!go-zero 成长之路—微服务电商实战系列(六、条件查询)go-zero 成长之路—微服务电商实战系列(五、RPC定义)go-zero 成长之路—微服务电商实战系列(四、API定义)

2022-10-20 17:21:24 762

原创 go-zero 成长之路—微服务电商实战系列(六、条件查询)

在产品服务版块中咱们会有分页和条件的检索查询对应的产品列表。检索条件的组合分页条数的计算检索条件的sql语句格式化输出数据的返回这里总共3个情况。go-zero 成长之路—微服务电商实战系列(五、RPC定义)go-zero 成长之路—微服务电商实战系列(四、API定义)go-zero 成长之路—微服务电商实战系列(三、表结构篇)go-zero 成长之路—微服务电商实战系列(二、划分篇)go-zero 成长之路—微服务电商实战系列(一、需求篇)

2022-10-18 22:10:12 1932 2

原创 go-zero 成长之路—微服务电商实战系列(五、RPC定义)

在第三章讲到:表结构划分,共8user表product、category表cart表orders、、表pay_info表总共5个服务。在咱们原先的构想中,远不止远不止以上这5个服务版块。但是对于电商系统来说,这5个版块是重中之重的,是必不可少的。在第四章API定义,针对5个服务进行接口定义。有了API那自然就要说到RPC了。所以咱们该篇文章就针对重中之重的5个版块进行RPC的定义,用于对API数据依赖的开发。go-zero 成长之路—微服务电商实战系列(四、API定义)

2022-10-08 09:41:48 636 2

原创 go-zero 成长之路—微服务电商实战系列(四、API定义)

不同的微服务间需要做数据的隔离,每个微服务独占数据库资源,通过RPC调用来获取数据依赖,整体架构如下图所示:通过以上对API的定义我们大致了解了需要定义哪些服务的API,下面开始API的定义。这里采用 api.api 文件的形式进行构建API服务。

2022-09-14 09:30:54 1490

原创 go-zero 成长之路—微服务电商实战系列(三、表结构篇)

不同的微服务间需要做数据的隔离,每个微服务独占数据库资源,通过RPC调用来获取数据依赖,整体架构如下图所示:通过以上对API的定义我们大致了解了需要哪些数据字段,下面开始进行数据表的设计,建表语句放在每个服务的model目录下的sql文件中,该文件会不断更新,主要涉及的库和表定义如下:用户表主要保存用户信息,在user。

2022-09-05 13:52:29 1110

原创 go-zero 成长之路—微服务电商实战系列(二、划分篇)

微服务架构能够快速、频繁、可靠地交付大型、复杂的应用程序,通过业务拆分实现服务组件化,使用组件进行组合从而快速开发系统。

2022-09-02 12:02:29 1328 2

原创 go-zero 成长之路—微服务电商实战系列(一、需求篇)

最近在研究微服务,了解到go-zero,针对go-zero目前社区上基于go-zero比较完整的开源项目,很遗憾好像没有。因此决定和大家一起从零开始基于go-zero构建一个完整的接近生产级的开源项目。该系列的设计理念是基于go-zero构建一个基础的高并发微服务商城系统,为什么要选择这个设计理念呢?一、是电商平台业务运行复杂多变,资源版块众多,微服务可以很好的实现业务独立运作,业务解耦。二、更好的处理高并发的场景。该系列为go-zeroGOMySQLRedisgo-zero。...

2022-08-30 14:58:18 1679 1

原创 Go 语言快速入门指南:指针、Map

Map是一种通过key来获取value的一个数据结构,其底层存储方式为数组,在存储时key不能重复,当key重复时,value进行覆盖,我们通过key进行hash运算(可以简单理解为把key转化为一个整形数字)然后对数组的长度取余,得到key存储在数组的哪个下标位置,最后将key和value组装为一个结构体,放入数组下标处。Go语言中MapKeyType: 表示键的类型。ValueType: 表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make()函数来分配内存。其中cap表示。...

2022-08-07 15:11:25 433

原创 Go 语言快速入门指南:结构体

Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。Part11. 类型别名和自定义类型11.1 自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如://将MyInt定义为int类型type MyInt i

2022-08-06 07:40:39 267

原创 Go 语言快速入门指南: 变量和常量

1. 变量1.1 变量的来历程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。1.2 变量类型变量(Variable)的功能是存储数据。不同的变量保存的数据类型可能会不一样。经过半个多世纪的发展,编程语言已经基本形成了一套固定的类型,常见变量的数据类型有:**整型、浮点型、

2022-08-04 13:42:23 148

原创 5 个 Docker 日志记录最佳实践

微服务和容器很好地融合在一起,但它们使日志记录成为一项挑战。设置监控时请牢记这些注意事项。在过去的几年里,容器已经成为IT领域的一个巨大话题,尤其是在DevOps领域。简单地说,容器提供了一种简单且可扩展的方式,可以在从一个环境迁移到另一个环境时可靠地运行软件。容器通过在一个包中提供整个运行时环境来做到这一点,其中包括应用程序,以及运行它所需的所有依赖项、库和其他二进制文件以及配置文件。与容器紧密结合的是微服务,它代表了一种更敏捷的应用程序开发方式。微服务架构Docker...

2022-08-02 09:51:48 505

原创 gin牛逼的context

Gin封装的最好的地方就是context和对response的处理.github的README的介绍,基本就是对这两个东西的解释.本篇文章主要解释context的使用方法,以及其设计原理。

2022-08-01 21:05:47 759

原创 Go 项目实战-获取多级分类下的全部商品

备注前面项目中用到的代码已经分享到GitHub中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。地址goshop感兴趣的可以点个star哦~goshop开源项目的更新。

2022-07-31 08:02:21 298

原创 Mac + Docker + K8S 本地搭建K8S集群

如果访问页面报错x509certificatesignedbyunknownauthority(possiblybecauseof“crypto/rsaverificationerror”whiletryingtoverifycandidateauthoritycertificate“kubernetes”)可以能是第一次安装失败导致,把k8s相关的都删了重新来。点击登录,进入以下页面证明就成功了。,同时可以解决经常遇到的。中的K8S一直卡在。............

2022-07-28 17:10:19 2826 1

原创 Nginx 面试 40 连问,快顶不住了~~

Nginx是一个 轻量级/高性能的反向代理Web服务器,用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡,他可以处理2-3万并发连接数,官方监测能支持5万并发,现在中国使用nginx网站用户有很多,例如:新浪、网易、 腾讯等。首先,Nginx 在启动时,会解析配置文件,得到需要监听的端口与 IP 地址,然后在 Nginx 的 Master 进程里面先初始化好这个监控的Socket(创建 S ocket,设置 addr、reuse 等选项,绑定到指定的

2022-07-05 18:30:48 118

原创 php+redis实现超时取消订单功能

秒杀业务逻辑:多个用户同时抢单,通过mysql行锁抢到的用户进入待支付页面(倒计时)。当用户没有支付订单超时时则取消该订单并归还库存。(可以自定义命令常驻)消费者:这里我们需要一个常驻内存一直来查询这个列队是否有消息,如果有就消费掉。workerman测试结果:我这边是延迟20秒消费,如下:消费掉后列队就空了哦~可能有些人会问,有定时器,可以直接延迟操作呀?为什么如此多此一举呢?解决重启了就丢数据的问题。当然也可以使用其他的消息中间件来解决,比如,不过对于宝塔用户安装简介还是吧!说三遍,数据

2022-07-05 11:51:23 266

原创 GO项目实战 — Gorm格式化时间字段

在使用 查询时,如果未对时间字段进行处理,结构体内的字段类型咱们使用的是 :这里咱们使用 类型在 进行查询的返回结果,读取到的时间字段往往是这样:“”,带着时区和毫秒。但其实往往这样的格式,不是咱们想要的。如果想要 “” 这样的格式,需要怎么处理呢?当插入一条数据到对应的表中时, 字段是不赋值的,插入到数据库则会 ,系统赋了⼀个默认值,当不想插⼊时如何处理?读取到的时间需要是:“2022-07-03 22:14:02” 这样的格式当时间字段不赋值时,不插入默认值虽然该数据类型实际类型为 ,但是不

2022-07-04 18:17:28 4256 4

原创 Go项目实战—参数绑定,类型转换

最近在研究微服务框架go-zero,没有更新,在这里说声抱歉,后面会持续更新新的功能。请继续关注~~~~今天考虑参数绑定获取。这里肯定有些疑惑,之前不是封装了获取全部参数的方法吗?回顾之前咱们封装了获取全部参数的方法,只能是请求,并且请求方式必须是: 才能正常获取,局限性非常大。需求1:使用任意请求方式,任意请求格式都可以获取到指定的值?需求2:获取到的类型参数,转换成类型用于的查询?框架中可以使用参数绑定进行任意请求方式和请求类型获取请求的参数框架集成,使用条件查询时,需要传入类型的数组格式,需要。首先,

2022-07-04 18:16:27 706

原创 从一个例子看Go的逃逸分析

下面是一段 c 代码,函数 getStr 生成了 a-z 的串,我们分别在函数内部和 main 中对字串进行了输出。运行结果如下:如果你有一些 c 的编程经验,那么你一定知道产生这个结果是因为 buf[27]的内存是在函数栈上分配的,这段内存在函数结束后会被自动回收,所以在 main 函数中想再次输出这个字串,就会产生一个未知的结果。我们在对上面代码进行编译时,编译器也会给出 告警:解决这个问题的方法之一(只是一种方法,并非好的实践)是在函数内部使用 malloc 申请一段内存,因为 malloc 的

2022-06-28 15:00:14 149

原创 Go 处理大数组:使用 for range 还是 for 循环?

我们知道,Go 的语法比较简洁。它并不提供类似 C 支持的 while、do...while 等循环控制语法,而仅保留了一种语句,即 for 循环。

2022-06-19 14:35:20 115

原创 Gopher 应该记住这 10 个命令

大家好,我是程序员小乔。 GO最近真的起飞了。越来越多的公司采用它,开发人员也普遍接受它,因为它易于学习,功能强大。如果你目前正在学习GO语言,这里有10个有用的GO命令,你可能会在每天使用GO时使用它们。...

2022-06-06 21:31:51 139

原创 从项目的一个 panic 说起:Go 中 Sync 包的分析应用

项目开发中遇到一个错误 “fatal error: concurrent map read and map write”。有过一两年 Golang 开发经验的同学应该都不陌生,这是 Golang 内建的 map 并发非安全 导致的。解决办法也不复杂 — 用 sync.map 代替了内建的 map 。sync.map 包是 Golang 1.9 之后官方支持的并发安全的 map 包,之所以放在 sync 包里,是因为 sync 包里包含了 Golang 语言的绝大部分同步原语,它是 Golang 并发编程中

2022-06-01 09:25:16 297

原创 GO项目实战—开发上传图片功能【goshop开源项目| 20220527更新】

goshop开源项目的更新备注:前面项目中用到的代码已经分享到GitHub中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。地址 goshop 感兴趣的可以点个star哦~https://gitee.com/jobhandsome/goshop/今天图片上传功能,下面是技术点:限制图片上传的类型:jpg|png|jpeg保存图片并以时间(天)作为动态目录存储接下来咱们就来实现以上功能接下来咱们就来实现以上功能:// 上传图片接口func Uploads(ctx *gin..

2022-05-28 08:34:00 541

原创 PHP高并发商品秒杀问题的解决方案

前言秒杀会产生一个瞬间的高并发,使用数据库会增加数据库的访问压力,也会降低访问速度,所以我们应该使用缓存,来降低数据库的访问压力;可以看出这里的操作和原来的下单是不一样的:产生的秒杀预订单不会马上写入数据库,会先写入缓存,等用户支付成功时,修改状态,写入数据库。假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量。if($num > 0){ //用户抢购成功,记录用户信息 $num--;}假设在一个并发量较高的场景,数据库中num的值为1时,可能同时会有多个进程读取到nu

2022-05-27 10:36:29 1426 3

原创 如何判断一个 interface{} 的值是否为 nil ?

引言在开始之前,先考你一个非常 Go 味的经典问题:如何判断一个 interface{} 的值是否为 nil ?这也是面试有可能会被问到的一个问题,这个问题很 “迷”,平时没有特别留心的朋友,很容易在这边裁了。我相信很多人会下意识的回答,直接 v == nil 进行判断不就好了吗?很久之前,我也是那么想的,可写了个 demo 后,才发现事情没那么简单。请看下面这段代码,可以先猜测一下输出的结果。package mainimport ( "fmt")func main() {

2022-05-21 09:27:53 552

原创 Go项目实战之验证码的生成和使用(易扩展方式【goshop开源项目 | 20220516更新】

goshop开源项目的更新备注:前面项目中用到的代码已经分享到GitHub中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。地址 goshop 感兴趣的可以点个star哦~ goshop开源项目的更新 今天咱们做一个登录功能中的验证码功能:封装验证码生成,验证码验证等功能,以便多复用封装session的中间件接下来咱们就来实现以上的问题和功能:先封装验证码业务部分// 生成验证码func Captcha(ctx *gin.Context) { /

2022-05-16 21:29:50 546

原创 2万字彻底讲透 全文搜索引擎 Elasticsearch

生活中的数据搜索引擎是对数据的检索,所以我们先从生活中的数据说起。我们生活中的数据总体分为两种:结构化数据: 也称作行数据,是由二维表结构来逻辑表达和实现的数据,严格地遵循数据格式与长度规范,主要通过关系型数据库进行存储和管理。指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据: 又可称为全文数据,不定长或无固定格式,不适于由数据库二维表来表现,包括所有格式的办公文档、XML、HTML、Word 文档,邮件,各类报表、图片和咅频、视频信息等。说明:如果要更细致的区分的话,XML、

2022-05-16 11:23:41 258

原创 Go 工程化标准实践

本文参考 Go 微服务框架 go-kratos/kratos 的项目结构及相关最佳实践,Kratos 一套轻量级 Go 微服务框架,包含大量微服务相关功能及工具。项目结构标准项目结构/cmd|-- cmd |-- demo |-- demo +-- main.go +-- demo1 |-- demo1 +-- main.go项目的主干,每个应用程序目录名与可执行文件的名称匹配。该目录不应放置太多代码。/int.

2022-05-14 11:54:15 1234 1

原创 一次有趣的SQL 优化:从 30248.271s 到 0.001s

场景我用的数据库是mysql5.6,下面简单的介绍下场景课程表create table Course(c_id int PRIMARY KEY,name varchar(10))数据100条学生表:create table Student(id int PRIMARY KEY,name varchar(10))数据70000条学生成绩表SCCREATE table SC( sc_id int PRIMARY KEY, s_id int,

2022-05-08 21:27:51 108

原创 Go项目实战之无限级结构树形数据格式(易扩展方式)【goshop开源项目 | 20220430更新】

goshop开源项目的更新备注:前面项目中用到的代码已经分享到GitHub中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。地址 goshop 感兴趣的可以点个star哦~  goshop开源项目的更新 今天咱们做一个无限级结构树形数据格式:做一个菜单列表形式的一个树形结构,以满足后续的功能业务开发,类似于下图的功能做成方便扩展的方式接下来咱们就来实现以上的问题和功能:先修改一下分页获取全部数据的方法 findAll,将之前[]Roles改为[]

2022-04-30 19:37:19 606 3

原创 Go项目实战—格式化日期函数 (易扩展方式)【goshop开源项目 | 20220428更新】

goshop开源项目的更新备注:前面项目中用到的代码已经分享到GitHub中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。地址 goshop 感兴趣的可以点个star哦~ goshop开源项目的更新 今天在考虑之前做的登录接口记录登录时间无法正常记录入库的问题:不使用gorm.Model 中的UpdateAt的字段,单独拉一个LoginAt作为记录字段:类型就定为string通过获取当前时间戳转换后的日期格式:2022-04-24T16:29:27+08:00 转换

2022-04-28 20:43:12 458

原创 Go项目实战—开发完善分页插件(易扩展方式)【goshop开源项目 | 20220424更新】

goshop开源项目的更新备注:前面项目中用到的代码已经分享到GitHub/Gitee中去了,并且以后所有项目中会出现的代码都会提交上去,欢迎查阅。地址 goshop 感兴趣的可以点个star哦~ goshop开源项目的更新 今天在考虑怎么实现数据分页和检索功能:通过传入页数(page),分页条数(pageSize) ,实现数据的 limit 分页功能动态支持检索条件和排序的功能接下来咱们就来实现以上功能首先需要先封装一个 Paginate 的扩展用于对gorm操作时引用Off

2022-04-28 20:40:14 527

原创 PHP 非对称加解密算法的实现和应用

在日常设计及开发中,为确保数据传输和数据存储的安全,可通过特定的算法,将数据明文加密成复杂的密文。目前主流加密手段大致可分为单向加密和双向加密。加密的类型单向加密:通过对数据进行摘要计算生成密文,密文不可逆推还原。算法代表:Base64,MD5,SHA。双向加密:与单向加密相反,可以把密文逆推还原成明文,双向加密又分为对称加密和非对称加密。对称加密:指数据使用者必须拥有相同的密钥才可以进行加密解密,就像彼此约定的一串暗号。算法代表:DES,3DES,AES,IDEA,RC4,RC5。非对称加密.

2021-01-13 14:29:16 375

golang中便捷使用的助手函数

golang 方便使用的助手函数

2022-05-08

空空如也

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

TA关注的人

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