自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(261)
  • 收藏
  • 关注

原创 Git入门图文教程(深入浅出,详细了解Git,以及操作)

Git是当前最先进、最主流的分布式版本控制系统,免费、开源!核心能力就是版本控制。再具体一点,就是面向代码文件的版本控制,代码的任何修改历史都会被记录管理起来,意味着可以恢复到到以前的任意时刻状态。支持跨区域多人协作编辑,是团队项目开发的必备基础,所以Git也就成了程序员的必备技能。🟢主要特点开源免费,使用广泛。强大的文档(代码)的历史版本管理,直接记录完整快照(完整内容,而非差异),支持回滚、对比。分布式多人协作的的代码协同开发,几乎所有操作都是本地执行的,支持代码合并、代码同步。

2023-09-12 13:59:10 1819

原创 Golang 并发控制方式有哪些

Go语言中的goroutine是一种轻量级的线程,其优点在于占用资源少、切换成本低,能够高效地实现并发操作。但如何对这些并发的goroutine进行控制呢?一提到并发控制,大家最先想到到的是锁。Go中同样提供了锁的相关机制,包括互斥锁sync.Mutex和读写锁sync.RWMutex;除此之外Go还提供了原子操作sync/atomic。但这些操作都是针对并发过程中的数据安全的,并不是针对goroutine本身的。本文主要介绍的是对goroutine并发行为的控制。和。

2024-02-02 17:58:21 1171

原创 Go 为什么建议使用切片,少使用数组?

本文我们介绍 Go 语言为什么建议多使用切片,少使用数组。主要是因为切片值传递的成本更低,更加适合作为函数参数,并且使用内置函数 append追加切片元素时,当切片容量不足时可以自动扩容。需要注意的是,虽然切片可以自动扩容,但在扩容时会涉及内存分配,造成系统开销,尽量在创建切片时,预估出切片的最终容量。

2024-01-26 10:41:09 678

原创 Go 如何应对高并发 | 高并发详解

并发编程是当前软件领域中一个重要的概念。Go语言通过goroutine和channel的特性,天生支持高并发处理,充分利用现代CPU的多核优势。与Java相比,Go语言的协程更加轻量级,可以轻松创建上百万个协程。Go语言的调度器采用GPM调度模型,通过将协程放入队列中,由调度器分配给CPU处理。此外,Go语言采用CSP模型,通过channel实现协程之间的通信,避免了共享内存带来的竞态问题。相比之下,Go语言的Mutex锁更轻量、灵活,并且具有更高的性能。

2024-01-26 09:56:07 1174

原创 分布式架构高性能与可用性

分布式系统的高性能和可用性是构建稳定、高效的系统的关键要素。服务降级:通过划分降级等级和分类,可以减轻系统负载并提供更好的用户体验。在分布式系统中,可以根据服务的重要性和影响程度进行降级操作,保护核心功能,并根据实际需求灵活配置降级开关。服务熔断:通过应用隔离和熔断模式来保护系统稳定性和可用性。应用隔离可以通过线程池隔离和信号量隔离来限制资源使用和控制并发访问,避免故障服务对整个系统产生连锁效应。熔断模式定义了触发熔断操作的条件和行为,快速失败并逐渐恢复请求,以保护系统免受故障服务影响。高性能设计原则。

2023-12-27 17:58:17 997

原创 Go 条件控制语句

在 Go 语言中,主要的条件控制语句有 if-else、switch和 select。

2023-12-27 17:04:35 1104

原创 MySQL列操作记录

在 MySQL 中,你可以使用多种命令和语句来执行列操作,包括添加、修改、删除列等。这些命令和语句使你能够有效地执行列操作,从而适应你的数据模型的演化和需求变化。

2023-12-01 13:43:06 227

原创 Why Microservices

微服务(Microservices)是一种软件架构设计风格,其中应用程序由一组小型、独立、自治的服务组成,这些服务共同工作以构建整体应用。每个服务都专注于一个特定的业务功能,可以独立部署、扩展和维护。微服务架构旨在提高系统的灵活性、可维护性和可扩展性,并促使敏捷开发和交付。选择使用微服务架构是基于一系列优势和需求的考虑。微服务架构是一种将软件应用拆分为小型、自治、独立部署的服务的设计方法。

2023-12-01 13:38:40 205

原创 二叉树简介

二叉树是计算机科学中一种重要的数据结构,它在许多应用领域中都有广泛的用途。本文将介绍二叉树的概念、性质、常见类型和应用。二叉树是一种树形数据结构,它由节点构成,每个节点最多有两个子节点,通常称为左子节点和右子节点。这两个子节点可以为空,也可以包含数据或值。二叉树是一种层次结构,根节点位于树的顶部,其他节点按照层级依次排列。

2023-12-01 10:03:05 455

原创 Redis 如何批量删除指定前缀的Key

批量删除指定前缀的Key有两中方法,一种是借助 redis-cli,另一种是通过 SCAN命令来遍历所有匹配前缀的 key,并使用 DEL命令逐个删除它们。

2023-11-30 15:33:43 2578

原创 MySQL 使用命令

ALTER TABLE可以用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。除了在mysql命令行下导出查询结果,还可以在终端直接导出查询结果到文件中。使用INTO OUTFILE时需要设置secure_file_priv参数。可以在mysql命令行下使用。MySQL导出数据库、表结构。参数将查询结果导出到文件中。

2023-11-30 15:24:44 268

原创 MySQL 大表设计

存储大规模数据集需要仔细设计数据库模式和索引,以便能够高效地支持各种查询操作。在面对数亿条数据,每条数据包含数百个字段的情况下,以下是我能想到的在设计数据库的时候需要注意的内容。

2023-11-30 11:20:53 226

原创 什么是gRPC

使用 Protocol Buffers 进行接口定义,语法简洁清晰,易于阅读和维护。支持请求和响应中的复杂数据结构,并提供了方便的工具来生成客户端和服务端的代码。

2023-11-30 10:51:29 166

原创 Go 从编译到执行

Go语言(也称为Golang)自从2009年由Google发布以来,已成为现代软件开发中不可或缺的一部分。设计者Rob Pike, Ken Thompson和Robert Griesemer致力于解决多核处理器、网络系统和大型代码库所引发的现实世界编程问题。我们将深入探讨Go语言在运行和编译方面的核心思考点。

2023-11-29 14:22:15 462

原创 Go 谈论了解Go语言

Go语言,自2009年由Google推出以来,凭借其简洁的语法、出色的性能和高度的可移植性,迅速崭露头角。它为并发编程提供了一流的支持,同时拥有丰富而强大的标准库。在云原生、微服务、数据分析等多个前沿领域里,Go已经成为了一种不可或缺的编程工具。它的生态系统日渐完善,拥有大量的开源项目和活跃的社群。综上所述,无论你是希望构建高性能的服务端应用,还是寻求一种高效、可靠的通用编程语言,Go都是一个值得深入学习和使用的选择。

2023-11-29 10:54:29 423

原创 Go GORM简介

在GORM中,你可以通过定义Go结构体来创建数据库表。gorm.ModelPrice uint然后,你可以使用。

2023-11-28 15:41:05 586

原创 Go 接口:Go中最强大的魔法 接口应用模式或惯例介绍

通过这种垂直组合,我们可以达到方法实现的复用、接口定义重用等目的。在实现层面,Go 语言通过类型嵌入(Type Embedding)实现垂直组合,组合方式主要有以下几种。

2023-11-28 10:54:31 61

原创 Go 接口:nil接口为什么不等于nil?

接口的静态特性体现在接口类型变量具有静态类型。比如 var err error中变量 err的静态类型为 error。拥有静态类型,那就意味着编译器会在编译阶段对所有接口类型变量的赋值操作进行类型检查,编译器会检查右值的类型是否实现了该接口方法集合中的所有方法。**而接口的动态特性,就体现在接口类型变量在运行时还存储了右值的真实类型信息,这个右值的真实类型被称为接口类型变量的动态类型。我们可以看到,这个示例通过 errros.New构造了一个错误值,赋值给了 error接口类型变量 err。

2023-11-28 10:19:37 436

原创 实现流量控制和熔断降级

在 Sentinel 中,资源是你想要保护的对象,可以是接口、方法、HTTP 路由等。你需要为你的资源定义流量控制规则。假设你要保护一个函数 myFunction// 你的业务逻辑你可以在初始化代码中定义流量控制规则,以控制资源的访问速率。// 定义流量控制规则Count: 100, // 允许的最大 QPSControlBehavior: base.Reject, // 超出限制后的处理行为},})if err!= nil {// 处理规则加载错误panic(err)

2023-11-24 14:19:42 338

原创 Go 本地搭建playground

搭建go playground 的步骤。

2023-11-24 13:53:23 660

原创 Go lumberjack 日志轮换和管理

在开发应用程序时,记录日志是一项关键的任务,以便在应用程序运行时追踪问题、监视性能和保留审计记录。Go 语言提供了灵活且强大的日志记录功能,可以通过多种方式配置和使用。其中一个常用的日志记录库是 github.com/natefinch/lumberjack,它提供了一个方便的方式来处理日志文件的轮换,以防止日志文件无限增长。本文将详细介绍 github.com/natefinch/lumberjack,包括其主要特点、如何使用它以及示例代码。让我们一起深入了解这个有用的 Go 语言日志记录库。

2023-11-23 11:02:32 820 1

原创 gRPC with JWT

在 gRPC 中使用 JWT(JSON Web Tokens)进行身份验证是一种常见的做法,它可以帮助你确保请求方的身份和权限。

2023-11-23 10:54:42 205

原创 Go iota简介

iota是Go语言中的一个预定义标识符,用于创建自增的无类型整数常量。iota在每个常量声明中按顺序递增,但可以通过显式操作进行调整或跳过。通过使用iota,我们可以简化枚举类型和相关常量的定义,避免手动编写递增的值。

2023-11-23 10:50:00 554

原创 Go 实现网络代理

使用 Go 语言开发网络代理服务可以通过以下步骤完成。这里,我们将使用 golang.org/x/net/proxy包来创建一个简单的 SOCKS5 代理服务作为示例。

2023-11-22 10:11:32 814

原创 Go 异常处理流程

在Go中,runtime包是负责处理Go运行时(runtime)的细节,包括垃圾回收、协程调度等。当出现panic时,runtime包会负责处理这些异常情况。当程序中出现panic异常的传播:当一个函数发生panic时,该函数会立即停止执行,并将panic传播到调用它的函数。这个过程会一直向上传播,直到被捕获或程序终止。栈的展开(Unwinding):在panic发生时,Go运行时会开始展开调用栈(stack unwinding)。

2023-11-22 10:08:31 619

原创 MySQL 存储过程提高数据库效率和可维护性

MySQL存储过程是一组预编译的SQL语句,它们以一个名称存储在数据库中,可以随时被调用执行。存储过程可以接受输入参数、执行一系列操作,并返回结果。这些特性使得存储过程成为处理复杂查询、数据操作和事务管理的理想工具。

2023-11-17 13:55:56 592

原创 Go 字符串处理:fmt.Sprintf与string.Builder的比较

在Go语言中,我们通常会遇到两种主要的方式来处理和操作字符串:使用函数和类型。尽管两者都可以实现字符串的格式化和连接,但它们在性能和用法上有一些关键区别。

2023-11-17 13:50:43 392

原创 Go 上下文 context.Context

Go语言中的上下文(Context)是一种用于在 Goroutines 之间传递取消信号、截止时间和其他请求范围值的标准方式。context包提供了Context类型和一些相关的函数,用于在并发程序中有效地传递上下文信息。

2023-11-17 13:46:43 373

原创 Go 使用Viper处理Go应用程序的配置

Viper是一个应用程序配置解决方案,用于Go应用程序。它支持JSON、TOML、YAML、HCL、envfile和Java properties配置文件格式。它还支持环境变量、命令行标志、远程配置系统(如etcd或Consul),并且可以直接监控配置文件的变化。Viper是一个强大的库,可以帮助我们处理Go应用程序的配置。它支持多种配置源,包括配置文件、环境变量、命令行参数等等,使得处理配置变得简单而直观。

2023-11-16 09:44:58 304

原创 Go fsnotify简介

fsnotify是一个用Go编写的文件系统通知库。它提供了一种观察文件系统变化的机制,例如文件的创建、修改、删除、重命名和权限修改。它使用特定平台的事件通知API,例如Linux上的inotify,macOS上的FSEvents,以及Windows上的ReadDirectoryChangesW。fsnotify然而,需要注意的是,由于不同的操作系统对文件系统通知的支持程度和方式有所不同,所以在使用fsnotify时,要注意不同平台的差异性,并根据实际需求进行适当的调整。

2023-11-16 09:40:23 373

原创 Go ZIP压缩文件读写操作

【代码】Go ZIP压缩文件读写操作。

2023-11-15 15:29:58 392

原创 Go 理解零值

在 Go 语言中,零值(Zero Value)是指在声明变量但没有显式赋值的情况下,变量会被自动赋予一个默认值。这个默认值取决于变量的类型,不同类型的变量会有不同的零值。零值是 Go 语言中的一个重要概念,因为它确保了变量在声明后具有一个可预测的初始状态,减少了未初始化变量引发的问题。

2023-11-15 15:18:44 525

原创 队列(Queue):先进先出(FIFO)的数据结构

队列是一种基本的数据结构,用于在计算机科学和编程中管理数据的存储和访问。队列遵循先进先出(First In, First Out,FIFO)原则,即最早入队的元素首先出队。这种数据结构模拟了物理世界中的队列,如排队等待服务的人。在本篇中,我将详细介绍队列的概念、用途、实现以及如何在编程中使用队列。如有问题的地方请指出!!!

2023-11-10 11:37:36 1311

原创 Go 什么是循环依赖

Go 中的循环依赖是指两个或多个包之间相互引用,形成了一个循环依赖关系。这种情况下,包 A 依赖包 B,同时包 B 也依赖包 A,导致两个包之间无法明确地确定编译顺序,从而可能引发编译错误或其他问题。循环依赖是 Go 中需要小心处理的问题,因为它可能导致程序不可编译或产生未定义行为。在这个示例中,包A 依赖包B,同时包B 也依赖包A。这种情况下,如果不采取适当的措施,编译器无法确定包的编译顺序,可能会导致编译错误。

2023-11-10 11:34:36 250

原创 Go RabbitMQ简介 使用

RabbitMQ 是一个广泛使用的开源消息队列系统,它实现了高级消息队列协议(AMQP)标准,为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的,具有高度的可扩展性和可靠性,因此被广泛用于构建分布式、异步的消息通信系统。在发送和接收消息之前,您需要定义一个队列。如果队列不存在,它将被创建。queueName, // 队列名称false, // 是否持久化false, // 是否自动删除false, // 是否排他false, // 是否阻塞。

2023-11-09 11:39:46 888

原创 Go defer简介

defer是 Go 编程语言中的一个关键字,用于在函数执行结束后延迟执行指定的函数调用。defer的使用非常灵活,它通常用于执行一些清理操作、资源释放、日志记录等任务。以下是对deferdefer的语法。

2023-11-09 11:30:35 327

原创 Go cobra简介

当你需要为你的 Go 项目创建一个强大的命令行工具时,你可能会遇到许多挑战,比如如何定义命令、标志和参数,如何生成详细的帮助文档,如何支持子命令等等。为了解决这些问题,就可以派上用场。是一个用于构建强大的命令行应用程序的 Go 语言库。它提供了一种简单且直观的方式来定义命令行接口,使开发者能够轻松地创建复杂的命令行工具,包括子命令、标志(flags)、参数、帮助信息和自定义用法。以下是cobra。

2023-11-09 11:17:19 481

原创 Go uuid库介绍

在现代软件开发中,全球唯一标识符(UUID)在许多场景中发挥着重要的作用。UUID是一种128位的唯一标识符,它能够保证在全球范围内不重复。在Go语言中,我们可以使用第三方库来方便地生成UUID。本文将介绍如何使用这个库来生成不同版本的UUID,以及它的优势和用途。

2023-11-07 14:00:30 514

原创 Go 定时任务实现

定时任务是指按照预定的时间间隔或特定时间点自动执行的计划任务或操作。这些任务通常用于自动化重复性的工作,以减轻人工操作的负担,提高效率。在计算机编程和应用程序开发中,定时任务是一种常见的编程模式,用于周期性地执行某些操作、处理数据或触发事件。时间间隔:定时任务通常由时间间隔来触发,这是指在两次任务执行之间的时间段。时间间隔可以是固定的,也可以是根据需要调整的。特定时间点:某些任务需要在特定的日期和时间执行,而不是按时间间隔触发。这可以用于计划将来的事件或在特定的日历日期执行任务。周期性任务。

2023-11-07 13:48:24 645 2

原创 Go 多版本管理

那么有没有既不影响我们自己的本地环境,又能兼顾历史项目的办法呢?答案当然是肯定的:有!又或是自己本地使用的是最新版,但公司的项目中使用的go1.14、go1.13甚至是更早的版本。在日常开发工作过程中,很多时候我们都需要在自己的机器上安装多个go版本,像是go1.16引入的。,go1.18引入了。

2023-11-03 13:47:39 426 1

空空如也

空空如也

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

TA关注的人

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