- 博客(133)
- 收藏
- 关注
原创 Golang学习笔记_34——组合模式
组合模式(Composite Pattern)是一种结构型设计模式,通过将对象组织成树形结构来表示“部分-整体”的层次关系,使客户端可以统一处理单个对象和组合对象。组合模式通过树形结构和统一接口层次结构表示:天然适合文件系统、组织架构等场景递归操作简化:通过统一接口实现递归遍历扩展性提升:新增组件类型不影响现有结构通过接口实现多态特性使用切片管理子组件集合谨慎处理叶子节点的无效方法(如Add()
2025-02-18 19:00:00
572
原创 Golang学习笔记_33——桥接模式
桥接模式是一种结构型设计模式,通过将抽象部分与实现部分分离,使它们可以独立变化。它通过组合关系替代继承关系,解决多维度的扩展问题。桥接模式通过分离抽象与实现多维度变化:独立管理不同维度的变化跨平台开发:统一抽象接口,差异化实现动态配置:运行时切换实现逻辑在 Go 中实现时需注意组合优于继承的原则,通过接口定义清晰的抽象边界。当系统存在多个独立变化维度时,桥接模式能显著降低代码复杂度。
2025-02-18 18:30:00
677
原创 Golang学习笔记_31——原型模式
原型模式是一种创建型设计模式,通过复制现有对象(原型)来创建新对象,而不是通过构造函数实例化。它适用于需要高效创建对象或动态配置对象的场景。原型模式通过复制现有对象对象创建成本高:避免重复初始化。需要动态配置对象:基于运行时状态生成变种。隔离构造细节:绕过复杂构造函数。在 Go 中实现时需注意深拷贝问题,可通过序列化或手动复制引用类型字段解决。如果需要更复杂的深拷贝逻辑(如循环引用处理),可以结合其他技术(如反射、代码生成工具)实现。
2025-02-17 16:52:57
688
原创 Golang学习笔记_30——建造者模式
建造者模式是一种创建型设计模式,用于分步骤构造复杂对象。它将对象的构造过程与其表示分离,使得同样的构造过程可以创建不同的表示。建造者模式通过分步骤构造对象和隔离构造逻辑,解决了复杂对象创建的灵活性问题。对象构造过程复杂,涉及多个步骤。需要生成不同表示的对象。避免构造函数参数过多。结合链式调用、参数校验等技巧,可以进一步提升代码的可读性和健壮性。如果需要更具体的扩展场景(如结合工厂模式),可以告诉我!🚀。
2025-02-11 14:06:28
834
原创 Golang学习笔记_29——抽象工厂模式
抽象工厂模式将产品的创建过程封装在工厂中,客户端代码只需要依赖抽象接口,而不需要关心具体实现。抽象工厂模式将具体产品的创建过程封装在工厂中,客户端只需要依赖抽象接口,无需关心具体实现。抽象工厂模式(Abstract Factory)是一种创建型设计模式,用于。抽象工厂模式确保创建的对象属于同一个产品族,从而保证它们之间的兼容性。抽象工厂模式支持在运行时动态切换产品族,而无需修改客户端代码。使用抽象工厂模式实现组件创建。示例 6:电商平台的支付与物流。示例 2:游戏中的角色装备。示例 8:游戏中的场景切换。
2025-02-11 09:54:04
958
原创 Golang学习笔记_28——工厂方法模式
工厂方法模式(Factory Method)是一种创建型设计模式,它提供了一种创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式让类的实例化推迟到子类中进行。
2025-01-20 21:51:27
763
原创 Golang学习笔记_27——单例模式
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这种模式在很多场景下非常有用,比如数据库连接池、日志系统等,这些场景中我们通常希望在整个应用程序中只有一个对象来负责相关的操作,避免资源的浪费和数据的不一致。
2025-01-19 22:09:07
1608
原创 Linux中的Iptables介绍
Iptables是一个用于配置Linux内核防火墙的用户空间工具。它能够对进出服务器的网络数据包进行过滤、修改和转发等操作,是构建安全的Linux网络环境的关键组件。它通过一系列规则来决定如何处理数据包,这些规则可以基于源IP地址、目标IP地址、端口号、协议类型等多种条件。
2025-01-19 22:06:50
866
原创 Golang学习笔记_26——通道
虽然协程可以并发执行,但有时候我们需要在协程之间传递数据或进行同步。在Go中,这是通过通道(Channel)来实现的。在Go中,协程是通过go关键字来创建的。当你使用go关键字调用一个函数时,该函数会在一个新的协程中执行。通道的类型由通道中传递的元素类型决定。例如,chan int是一个可以传递int类型数据的通道。协程的调度由Go运行时(runtime)管理,开发者不需要关心具体的调度细节。通道是一种类型安全的、多路复用的、在协程之间传递通信的管道。)向通道发送或接收数据。
2025-01-16 22:15:22
668
原创 Graalvm使用说明(Java新编译器)
GraalVM是Oracle公司开发并开源的一款通用虚拟机产品,官方称之为Universal GraalVM,是新一代的通用多语言高性能虚拟机。高性能:GraalVM内置了一个名为“Graal”的高效编译器,该编译器能够以接近本地代码的速度运行Java应用程序。提供了即时编译(JIT)技术的革新,能够在运行时动态地识别热点代码段并进行优化,进一步提升了应用的响应速度。
2025-01-16 18:01:21
1134
原创 Linux网络知识——路由表
Linux路由表是一个内核数据结构,用于描述Linux主机与其他网络设备之间的路径,以及如何将数据包从源地址路由到目标地址。路由表的主要作用是指导数据包在网络中的传输路径,确保数据包能够准确、高效地到达目标地址。
2025-01-15 21:27:46
604
原创 Linux网络知识——网络命名空间&&虚拟网卡
虚拟网卡是一种虚拟网络设备,它允许将多个逻辑网络接口映射到单个物理网络接口上。它是网络虚拟化的一部分,用于创建、管理和连接虚拟网络。
2025-01-15 21:05:03
247
原创 Golang学习笔记_25——协程
它们提供了一种高效的方式来并发执行任务。在Go中,协程是非常轻量级的,创建和销毁它们的开销非常小,这使得在Go程序中大量使用协程成为可能。go关键字后面跟的是一个函数调用。当Go运行时遇到go关键字时,它会在一个新的协程中异步执行该函数调用。Golang(也称为Go语言)中的协程(Goroutine)是一种轻量级的线程,由Go运行时管理。在Go中,你可以通过go关键字来创建一个新的协程。
2025-01-14 13:46:52
403
原创 Golang学习笔记_24——泛型
Go语言从1.18版本开始引入了泛型,这是Go语言的一个重要特性,它允许函数、类型和接口在定义时不必绑定到特定的类型上,而是可以在后续使用时再指定具体的类型。在调用泛型函数、创建泛型类型的实例或赋值给泛型接口时,类型参数会被具体化(实例化)。类型参数是泛型函数、泛型类型和泛型接口定义中声明的占位符,它们用于表示在泛型实例化时可以指定的具体类型。这通过类型约束来实现。泛型函数允许在函数签名中声明类型参数,这些参数将在函数调用时具体化。在泛型定义中,类型参数通过方括号[]中的类型参数列表进行声明。
2025-01-14 13:45:39
731
原创 Golang学习笔记_23——error补充
自定义错误类型可以实现error接口,该接口仅包含一个Error方法,返回一个字符串。// 自定义错误return err测试方法err!= nil {输出结果PASS。
2025-01-09 21:47:23
634
原创 Linux发行版本推荐
Mint (https://linuxmint.com/)Ubuntu (https://www.ubuntu.com/)MEPIS (http://www.mepis.org/)Arch (http://www.archlinux.org/)Gentoo (https://www.gentoo.org/)
2025-01-08 22:49:35
130
原创 Golang学习笔记_21——Reader
io.Reader 是 Go 语言标准库 io 包中的一个接口,它定义了对象读取数据的基本方法。io.Reader 接口非常简单,只有一个方法p []byte:一个字节切片,用于存储从读取器中读取的数据。n int:实际读取的字节数,0 <= n <= len§。如果 n == 0,通常意味着已经到达了数据流的末尾或没有更多数据可读。err error:读取过程中遇到的错误,如果读取成功,则 err 为 nil。
2025-01-08 22:43:43
580
原创 Golang学习笔记_19——Stringer
Golang学习笔记_16——MapGolang学习笔记_17——方法Golang学习笔记_18——接口在Go语言中,Stringer 是一个接口,定义在 fmt 包中。它用于自定义类型的字符串表示形式。当你希望你的类型在打印(例如使用 fmt.Print、fmt.Println 或 fmt.Sprintf 等函数)时具有特定的输出格式,你可以实现这个接口。Stringer 接口非常简单,只包含一个方法:2. 实现Stringer接口要实现 Stringer 接口,你需要为你的类型定义一个 Stri
2025-01-07 21:46:10
1047
原创 Golang学习笔记_18——接口
接口通过type关键字定义,并且接口中的方法没有实现(即没有函数体),只有方法签名。type 接口名 interface {方法名1(参数列表1) 返回值列表1方法名2(参数列表2) 返回值列表2...举个例子。
2025-01-06 13:41:18
456
原创 Golang学习笔记_17——方法
在Go语言中,方法(Method)是一种带有接收者(Receiver)的函数。接收者可以是值接收者(Value Receiver)或指针接收者(Pointer Receiver),并且它允许我们为特定类型定义附加的行为。方法使得我们可以像面向对象编程一样为结构体(Struct)或其他类型定义方法,但Go本身并不是纯面向对象的语言。记住:方法只是个带接收者参数的函数。// 方法体recv:接收者变量名,它是方法作用的对象实例。:接收者的类型,可以是值类型或指针类型。MethodName。
2025-01-06 13:39:27
835
原创 Golang学习笔记_16——Map
在Go语言中,map是一种内置的数据结构,用于存储键值对(key-value pairs)。map提供了快速的查找、插入和删除操作,使得它在处理需要快速访问的数据时非常高效。
2024-12-20 22:29:52
721
原创 Golang学习笔记_15——range
在Go语言中,range关键字用于遍历数组、切片、字符串、映射(map)、通道(channel)等数据结构。它提供了一种简洁且强大的方式来迭代这些集合中的元素。
2024-12-20 22:27:45
553
原创 go.mod文件中的Replace命令
在Go模块(Go Modules)创建的项目中,go get命令和replace命令是管理依赖项的两个重要工具。
2024-12-19 22:28:28
510
原创 Golang学习笔记_14——切片
指向数组的指针:切片存储了数组的首地址,指向数组中的某个元素。切片的长度(len):切片中元素的数量。切片的容量(cap):从切片的首元素到数组末尾的元素数量,表示在不需要重新分配底层数组的情况下,切片可以增长的最大长度。
2024-12-18 13:54:23
913
原创 Golang学习笔记_13——数组
/ 数组可以通过显式地指定长度和元素类型来定义// 定义时直接初始化数组的元素// 省略数组的长度,编译器会根据提供的初始化值的数量自动推断。
2024-12-18 13:52:43
644
原创 GeoIP介绍
原理GeoIP技术基于IP地址的地理位置数据库。这些数据库将IP地址范围与特定的地理位置相关联。当一个IP地址被查询时,GeoIP服务会查找该IP地址在数据库中的记录,并返回相应的地理位置信息。数据来源GeoIP数据库通常由专业的地理信息服务提供商维护和更新。这些数据库可以通过购买或免费下载获得,但免费数据库通常提供的地理位置信息较为有限。应用网络安全:用于识别访问者的地理位置,从而采取相应的安全措施。内容分发:根据访问者的地理位置,提供最近的内容服务器,以提高访问速度。市场分析。
2024-12-17 21:54:01
460
原创 Golang学习笔记_11——指针
指针是一个存储了内存地址的变量。在Go中,你可以通过*Type来声明一个指针,其中Type是指针指向的变量的类型。例如,*int是一个指向int类型变量的指针。
2024-12-16 21:45:47
610
原创 Golang学习笔记_10——Switch
语句可以基于一个或多个表达式进行匹配,并执行相应的代码块。语句是一种多分支选择结构,用于替代多个。语句,使代码更加简洁和易读。关键字会使程序继续执行下一个。
2024-12-16 21:43:36
446
原创 Golang学习笔记_09——if条件判断
语句的基本语法结构相对简单且直观,但也可以包含多个条件和分支。条件判断语句是用于根据条件表达式的真假来执行不同的代码块。)来声明并初始化一个新的变量,该变量的作用域仅限于。语句的初始化语句中,可以使用简短声明(
2024-12-14 13:53:08
744
原创 Golang中的go.mod和go.sum
go.mod和go.sum文件共同确保Go项目在不同环境下的可重复构建和安全性。它们通常通过Go的命令行工具自动生成和管理,开发者只需关注依赖关系的维护。go.mod文件定义了项目的模块名称和依赖关系,而go.sum文件则记录了依赖模块的校验和信息。通过这两个文件,Go Modules系统实现了对依赖关系的精确管理和版本控制,从而提高了项目的稳定性和可维护性。
2024-12-14 13:49:19
769
2
原创 Golang学习笔记_08——For循环
关键字结合使用,用于迭代数组、切片、字符串、映射(map)和通道(channel)是在循环体执行后才检查条件,而 Go 语言的无限循环需要手动控制退出):和 C、Java、JavaScript 之类的语言不同,Go 的。循环是唯一的一种循环结构,它非常灵活,可以用于实现传统的。在for循环的基础形式上,初始化语句和后置语句是可选的。初始化语句通常为一句短变量声明,该变量声明仅在。语句后面的三个构成部分外没有小括号, 大括号。如果省略初始化语句和后处理语句,循环将变成无限循环,类似于。,循环迭代就会终止。
2024-12-13 14:07:20
682
原创 Golang学习笔记_07——基本类型
布尔类型(Boolean Type)类型关键字bool取值范围true或false整数类型(Integer Types)有符号整数int8int16int32int64,以及int(根据平台不同,通常为32位或64位)无符号整数uint8uint16uint32uint64, 以及uintptr(无符号整数,足以存储指针)其他rune(等价于int32,用于表示Unicode码点)和byte(等价于uint8,用于表示字节)浮点类型(Floating-point Types)类型关键字。
2024-12-13 14:04:51
890
原创 Golang学习笔记_06——变量和常量
在Go语言中,局部变量(函数内部声明的变量)在函数被调用时创建,在函数返回时销毁。全局变量(包级别声明的变量)在程序开始时创建,在程序结束时销毁。Go语言中的变量是存储数据的基本单元,它们允许你为数据命名,从而在程序的不同部分中方便地引用和操作这些数据。进行简短变量声明,这种方式不仅声明变量,还根据初始值自动推断类型,并且只能用于函数内部。在Go语言中,编译器可以根据初始值自动推断变量的类型,因此可以省略类型声明。可以忽略不需要的返回值或变量。在Go语言中,可以在一行中声明多个变量。在函数内部,可以使用。
2024-12-12 13:26:37
515
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人