
golang
文章平均质量分 93
软件架构师笔记
致力于成为优秀软件架构师并记录成长之路。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
优化Docker Push性能从每秒9M提升至60M
在我司的项目中,因为经常会提交大的镜像文件有100G左右,而当前push的速度只有9M/s左右,每次都要3小时左右。过优化后速度可提升至60M/s左右,时间可缩短至半小时以内。的速度会受到单线程 gzip 压缩的限制。为了提升性能,可以通过修改 Docker 源码,引入。是当前示例中使用的版本,请根据实际需求选择合适的版本。(高效压缩算法)来替代默认的单线程 gzip 压缩。创建或修改 Docker 的服务配置文件以启用。在使用 Docker 进行镜像推送时,(多线程 gzip)和。生成的二进制文件位于。原创 2025-02-18 09:14:41 · 572 阅读 · 0 评论 -
Python讲解:装饰者模式
装饰者模式是一种结构型设计模式原创 2024-12-14 18:15:00 · 607 阅读 · 0 评论 -
Go讲解设计模式:代理模式
首先,我们需要定义一个File接口,该接口声明了所有文件应该实现的方法。// File 定义文件的基本操作接口Close()原创 2024-12-14 20:00:00 · 827 阅读 · 0 评论 -
Go讲解:享元模式
/ Flyweight 定义了享元对象的接口。原创 2024-12-14 19:45:00 · 1311 阅读 · 0 评论 -
Go讲解:责任链模式
责任链模式的主要目的是将请求的发送者和接收者解耦,使得多个对象都有机会处理请求。每个处理者都有机会处理请求或将其传递给下一个处理者,直到有一个处理者能够处理该请求为止。通过引入责任链模式,可以将请求的发送者和接收者解耦,使得系统更加灵活和易于扩展。首先,定义一个处理者接口Logger,用于表示日志处理者的通用行为。// Logger 定义了日志处理者的通用行为责任链模式是一种强大的行为型设计模式,特别适用于需要将请求的发送者和接收者解耦、支持多个处理者或动态地添加和移除处理者的场景。原创 2024-12-14 19:30:00 · 1554 阅读 · 0 评论 -
Go讲解设计模式:命令模式
首先,我们需要定义一个Command接口,该接口声明了所有命令应该实现的方法。// Command 定义命令的基本操作接口Execute()原创 2024-12-14 19:00:00 · 861 阅读 · 0 评论 -
Go讲解:解释器模式
/ AbstractExpression 声明了所有具体表达式类都必须实现的接口。原创 2024-12-14 14:00:00 · 918 阅读 · 0 评论 -
Go讲解设计模式:命令模式
首先,我们需要定义一个Command接口,该接口声明了所有命令应该实现的方法。// Command 定义命令的基本操作接口Execute()原创 2024-12-14 13:45:00 · 737 阅读 · 0 评论 -
Go讲解:中介者模式
/ Mediator 定义了同事对象用来与中介者通信的接口。原创 2024-12-14 13:30:00 · 705 阅读 · 0 评论 -
Go讲解:迭代器模式
迭代器模式的主要目的是提供一种统一的方式来遍历集合对象的元素,而不需要暴露其底层表示。通过引入迭代器,可以将遍历逻辑与集合对象分离,使得代码更加灵活和易于扩展。迭代器模式的核心思想是提供一个统一的接口来遍历不同类型的集合对象,而不需要关心这些集合对象的具体实现。首先,定义一个聚合接口Aggregate,用于表示集合对象的通用行为。// Aggregate 定义了创建迭代器对象的接口然后,定义一个迭代器接口Iterator,用于表示迭代器的通用行为。// Iterator 定义了遍历集合对象的接口。原创 2024-12-14 13:15:00 · 1410 阅读 · 0 评论 -
Go讲解:备忘录模式
首先,我们需要定义一个发起人类,它负责创建和管理Memento// Originator 负责创建和管理Memento对象,以及提供状态保存和恢复的方法接下来,为每个状态创建备忘录类,它用于存储Originator// Memento 用于存储Originator对象的内部状态,通常是不可访问的,以保持封装性然后,创建管理者类,它负责保存和恢复Memento// Caretaker 负责保存和恢复Memento对象,但不能直接访问其中的状态return nil。原创 2024-12-14 13:00:00 · 867 阅读 · 0 评论 -
Go讲解设计模式:观察者模式
Subject和Observer。Subject接口声明了添加、删除和通知观察者的方法,而Observer接口声明了更新方法。// Subject 定义主题的基本操作接口// Observer 定义观察者的基本操作接口。原创 2024-12-14 12:45:00 · 705 阅读 · 0 评论 -
Go讲解:策略模式
Strategy 定义了所有支持的算法的公共操作。原创 2024-12-14 12:30:00 · 817 阅读 · 0 评论 -
Go讲解:状态模式
状态模式的主要目的是允许对象在其内部状态改变时改变其行为。通过引入状态模式,可以将不同的状态封装成独立的类,并在状态之间进行切换,使得代码更加灵活和易于扩展。状态模式的核心思想是将对象的行为与状态分离,使得每个状态都有自己的行为实现,从而避免了冗长的条件判断语句。首先,定义一个状态接口OrderState,用于表示订单的不同状态。// OrderState 定义了订单状态的通用行为然后,定义一个上下文类,用于管理订单的状态转换。// OrderContext 管理订单的状态转换if c.state!原创 2024-12-14 08:08:06 · 752 阅读 · 0 评论 -
Go讲解:模板方法模式
/ AbstractClass 定义了算法的骨架,包含一个或多个模板方法和基本方法cm.Brew()原创 2024-12-14 08:07:51 · 859 阅读 · 1 评论 -
Go讲解:访问者模式
访问者模式的主要目的是允许你在不修改对象结构的情况下,为对象添加新的操作。通过引入访问者模式,可以将操作与对象结构分离,使得代码更加灵活和易于扩展。访问者模式的核心思想是定义一个访问者接口,该接口包含多个访问方法,每个方法对应于对象结构中的不同元素类型。这样,当需要对对象结构中的元素进行操作时,可以通过访问者接口来实现,而不需要修改对象结构本身。首先,定义一个访问者接口Visitor,该接口包含多个访问方法,每个方法对应于文件系统中的不同元素类型。// Visitor 定义了访问者的行为。原创 2024-12-14 05:44:45 · 801 阅读 · 0 评论 -
go 流式 API详解
流式 API 是一种强大的工具,特别适用于需要实时处理大量数据或长时间运行的操作。通过流式 API,你可以实现更高效的资源利用、更好的用户体验以及更灵活的错误处理。在 Docker SDK for Go 中,ImagePush是一个典型的流式 API,它允许你在推送镜像的过程中实时监控进度并处理错误。原创 2024-12-13 19:30:00 · 2023 阅读 · 0 评论 -
go io.ReadCloser详解
ReaderCloser }ReaderRead方法从数据源中读取最多len(p)个字节的数据,并将这些字节写入到切片p中。它返回实际读取的字节数n和一个错误err。如果err为nil,表示读取成功;如果err为io.EOF,表示已经到达数据源的末尾;其他错误则表示读取过程中发生了问题。CloserClose方法用于关闭资源,释放与之相关的系统资源(如文件描述符、网络连接等)。它返回一个错误,如果关闭操作成功,则返回nil;否则返回相应的错误信息。原创 2024-12-13 19:45:00 · 1095 阅读 · 0 评论 -
Gin 使用 go-playground/validator 详解
是一个非常流行且功能强大的 Go 库,用于验证结构体字段的合法性。结合 Gin 框架,可以轻松实现对 HTTP 请求参数的验证。本文将详细介绍如何在 Gin 中使用validator进行请求参数的验证。validator通过结构体字段上的标签(tags)来指定验证规则。常见的标签包括requiredminmaxemail等。例如,定义一个Userrequired:字段必须存在且不为空。min=3:字符串长度至少为 3。max=10:字符串长度最多为 10。email:字段必须是有效的电子邮件格式。原创 2024-12-13 07:59:19 · 1331 阅读 · 0 评论 -
Go讲解:工厂方法模式
/ Product 定义了所有具体产品都必须实现的操作Draw()然后,定义一个创建者接口,它声明了工厂方法以返回一个Shape// Creator 声明了工厂方法,该方法返回一个Product类型的对象。原创 2024-12-13 07:58:59 · 1011 阅读 · 0 评论 -
Go讲解:建造者模式
/ Product 定义了被构造的复杂对象,包含多个组成部分Bun string// Builder 定义了创建产品各个部分的接口// Director 负责控制建造过程,调用具体建造者的相应方法来逐步构建产品。原创 2024-12-13 07:58:42 · 815 阅读 · 0 评论 -
Go讲解:原型模式
/ Prototype 定义了克隆自身的接口Display()原创 2024-12-13 07:58:24 · 891 阅读 · 0 评论 -
Go讲解:适配器模式
/ Target 定义了客户端使用的接口。原创 2024-12-13 07:58:06 · 733 阅读 · 0 评论 -
Go讲解:抽象工厂模式
抽象工厂模式的主要目的是提供一个接口,用于创建一系列相关或依赖的对象,而无需指定它们具体的类。通过引入抽象工厂接口,客户端可以使用不同的具体工厂来创建一系列相关的对象,而不需要关心这些对象的具体实现细节。首先,定义两个抽象产品接口Button和TextBox,表示按钮和文本框的通用行为。// Button 定义了按钮的通用行为Paint()// TextBox 定义了文本框的通用行为Paint()接下来,实现两个具体产品类和,分别表示 Windows 主题和 macOS 主题的按钮。原创 2024-12-13 07:57:50 · 958 阅读 · 0 评论 -
Go讲解:桥接模式
/ Implementor 定义了实现部分的接口,具体实现由其子类提供然后,定义一个抽象类,它持有一个对// Abstraction 定义了抽象部分的接口,并持有一个对Implementor类型的引用= nil {原创 2024-12-13 07:57:32 · 921 阅读 · 0 评论 -
Go讲解:组合模式
/ Component 定义了所有具体组件的公共接口Add(component Component) // 添加子组件Remove(component Component) // 移除子组件Display(depth int) // 显示组件信息。原创 2024-12-13 07:57:13 · 1011 阅读 · 0 评论 -
Go讲解:装饰者模式
装饰者模式的主要目的是提供一种灵活的方式来为对象添加新的行为或职责,而不需要修改对象的原始类。通过引入装饰者类,可以在运行时动态地组合不同的功能,而不需要创建大量的子类。装饰者模式的核心思想是将对象包装在一个或多个装饰者中,每个装饰者都可以在调用被装饰对象的方法之前或之后添加额外的行为。首先,定义一个组件接口,表示文本对象的通用行为。// TextComponent 定义了文本对象的通用行为然后,定义一个装饰者接口,持有一个组件对象的引用,并实现了组件接口。原创 2024-12-13 07:56:54 · 1095 阅读 · 0 评论 -
Go讲解:外观模式
/ Subsystem Classes 实现了系统的功能,但接口可能比较复杂或难以使用。原创 2024-12-13 07:56:34 · 1035 阅读 · 0 评论 -
Go讲解设计模式:单例模式
在Go语言中,单例模式(Singleton Pattern)是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。单例模式通常用于那些需要控制资源访问的场景,比如数据库连接、线程池等。原创 2024-12-13 07:56:11 · 659 阅读 · 0 评论 -
深入浅出:Go 语言中从 `*gin.Context` 获取参数
框架中的核心对象,它封装了 HTTP 请求和响应的所有信息,并提供了多种方法来处理请求参数、路径参数、查询参数、表单数据、JSON 数据等。获取参数,我们来看一个实战案例:构建一个简单的用户管理系统。假设我们有一个创建用户的 API,客户端可以通过 POST 请求发送 JSON 数据来创建新用户。假设我们有一个需要验证 API 密钥的 API,客户端需要在请求头中提供。假设我们有一个登录表单,用户可以通过 POST 请求提交用户名和密码。假设我们有一个文件上传的功能,用户可以通过 POST 请求上传图片。原创 2024-12-11 19:30:00 · 1289 阅读 · 0 评论 -
2024年Go 语言面试100题整理
以下是精心挑选的 100 道 Go 语言面试问题。这些问题涵盖了 Go 语言的核心特性、标准库(主要关注http包)、并发编程、内存管理等方面的内容。原创 2024-12-11 12:00:00 · 846 阅读 · 0 评论 -
2024年go语言面试题汇总包含答案
这份面试题目汇总涵盖了Go语言中一些常见的问题,包括defer语句的工作原理、通道的作用和并发控制、字符串操作、map的实现和特性等。原创 2024-12-10 16:52:34 · 1660 阅读 · 0 评论 -
深入浅出:Python之禅与编程哲学
Python之禅(The Zen of Python)是一组由Tim Peters编写的指导原则,它概括了Python语言的设计理念和哲学。通过20条简短的格言,Python之禅不仅反映了这门语言的精神内核,也为开发者提供了宝贵的编程智慧。原创 2024-12-09 07:52:14 · 1573 阅读 · 0 评论 -
深入浅出 Go 语言:正则表达式
正则表达式是一种描述字符串模式的语法,用于定义一组规则,以匹配特定的字符序列。通过正则表达式,你可以轻松地查找、替换或验证符合某种模式的字符串。例如,如果你想查找一个字符串中所有的电子邮件地址,可以使用正则表达式来定义电子邮件的格式,并根据这个格式进行匹配。通过本文的学习,你已经掌握了 Go 语言中正则表达式的基本概念和使用方法。正则表达式是一种强大的文本匹配工具,可以帮助你轻松地处理复杂的字符串操作。我们介绍了如何创建和使用正则表达式、常见的正则表达式模式以及实际应用案例。原创 2024-12-09 07:51:36 · 1254 阅读 · 0 评论 -
深入浅出 Go 语言:指针编程
指针是一个变量,它存储的是另一个变量的内存地址,而不是具体的值。通过指针,你可以间接访问和修改该变量的内容。在 Go 中,指针的类型由符号表示,后面跟上指针所指向的类型。通过本文的学习,你已经掌握了 Go 语言中指针编程的基本概念和使用方法。指针允许你直接操作内存地址,从而实现高效的内存访问和修改。我们介绍了如何声明和使用指针、指针的安全性以及指针的实际应用。希望本文能够为你提供有价值的参考,帮助你更好地理解和使用 Go 语言的指针编程。如果你有任何问题或建议,欢迎在评论区交流!原创 2024-12-09 07:51:04 · 730 阅读 · 0 评论 -
深入浅出 Go 语言:协程(Goroutine)详解
协程是一种轻量级的线程,它由 Go 运行时自动调度和管理。与传统的操作系统线程不同,协程的创建和切换开销非常小,因此可以在一个程序中创建成千上万个协程,而不会对性能造成显著影响。在 Go 中,协程通过go关键字启动。任何函数都可以作为协程运行,只需在其调用前加上go关键字即可。通过本文的学习,你已经掌握了 Go 语言中协程编程的基本概念和使用方法。协程允许你轻松地编写并发代码,而不需要复杂的线程管理和锁机制。我们介绍了如何启动和管理协程、通道的使用以及常见的并发模式。原创 2024-12-09 07:50:41 · 1879 阅读 · 0 评论 -
深入浅出 Go 语言:泛型编程
泛型是一种编程机制,允许你在编写代码时使用占位符(称为类型参数)来表示未知的类型。编译器会在编译时根据具体的类型参数推导出实际的类型,并生成相应的代码。这样,你就可以编写一个函数或数据结构,使其能够处理多种不同的类型,而不需要为每种类型都编写单独的实现。func 函数名[类型参数列表](参数列表) 返回值 {// 函数体其中,类型参数列表是一个方括号内的逗号分隔的类型参数列表,每个类型参数可以用type关键字显式声明。参数列表和返回值与普通函数相同。除了使用内置约束外,你还可以定义自己的类型约束。原创 2024-12-08 16:40:31 · 1181 阅读 · 0 评论 -
深入浅出 Go 语言:内存管理和垃圾回收(GC)
栈和堆。栈:用于存储局部变量和函数调用时的参数。栈上的内存分配和释放非常快,因为它是基于 LIFO(后进先出)原则的。栈上的内存由编译器自动管理,开发者无需关心。堆:用于存储动态分配的对象,如通过new()或make()创建的对象。堆上的内存分配和释放由垃圾回收器(GC)管理。堆上的对象可以被多个栈帧共享,因此它们的生命周期通常比栈上的对象更长。通过本文的学习,你已经掌握了 Go 语言的内存管理和垃圾回收机制的基本原理和优化技巧。原创 2024-12-08 16:32:40 · 1135 阅读 · 0 评论 -
深入浅出 Go 语言:探索反射包reflect的使用
通过本文的学习,你已经掌握了 Go 语言中reflect包的基本概念、使用方法以及最佳实践。reflect包允许你在运行时动态地检查和操作类型和值,这对于编写通用工具、框架和库非常有用。然而,反射的使用也会带来性能开销和类型安全问题,因此在实际开发中应谨慎使用。原创 2024-12-08 18:30:00 · 1752 阅读 · 0 评论 -
深入浅出:Go语言中使用log包记录应用程序日志
日志是程序运行过程中产生的信息记录,通常用于描述发生了什么事件以及这些事件的时间戳。通过分析日志,我们可以了解系统的健康状态、性能瓶颈或潜在错误。日志还可以帮助我们回溯问题发生的上下文环境,从而加快故障排除的速度。通过本文的学习,你应该掌握了Go语言中log包的核心概念及其应用场景,包括创建和配置logger、设置日志前缀和标志、记录不同级别的日志、输出日志到文件以及高级特性的使用等方面的知识。无论是构建小型命令行工具还是大型Web服务,良好的日志实践都将为你编写健壮、可维护的代码奠定坚实的基础。原创 2024-12-08 08:19:30 · 792 阅读 · 0 评论