
golang入门
文章平均质量分 80
golang语言基础学习
半桶水专家
半桶水先生,不求甚解
展开
-
Go工具命令及使用指南
Go 是一个用于管理 Go 源码的命令行工具,支持代码编译、依赖管理、测试、格式化等操作。启动一个模板,用于提交 Go 语言的 Bug 报告(自动填充环境信息)。自动更新旧版 Go 代码的 API 到新版语法(用于升级兼容性)。静态分析代码,报告潜在错误(如无效的格式化字符串、未使用的变量)。格式化代码(自动调整缩进、空格等,遵循 Go 官方风格)。显示包或符号(如函数、类型)的文档(类似快速查看手册)。直接编译并运行 Go 程序(适合快速测试单个文件)。适用于需要同时开发多个模块的场景(如微服务项目)。原创 2025-03-24 09:53:57 · 519 阅读 · 0 评论 -
Go语言中package的使用规则《二》
Go 编译器严格禁止包之间的循环引用,需通过重构代码(如提取公共逻辑到独立包)解决。目录下的包,仅允许其父目录及其子目录的包导入(Go 1.4+ 特性)。每个包应专注于单一职责,避免“上帝包”(God Package)。同一包内的多个文件可直接访问彼此的未导出成员,无需导入。:直接访问包成员,无需包名前缀(慎用,易引发命名冲突)。一个包对应一个目录(文件夹),目录名通常与包名一致。函数,不直接使用包(常用于注册驱动或初始化)。:提取公共代码到新包,或使用接口解耦。(外部测试包)或原包名(内部测试)。原创 2025-03-20 14:06:58 · 1224 阅读 · 0 评论 -
Go语言反射机制详解
Go的反射功能强大,但应谨慎使用。在需要处理未知类型或动态行为时,反射是理想工具,但在已知类型的情况下,直接代码更高效、更安全。理解。原创 2025-03-20 09:13:00 · 997 阅读 · 0 评论 -
Go语言常用框架及工具介绍
在Go语言开发中,框架和工具的选择能够显著提升开发效率和项目可维护性。原创 2025-03-19 11:23:15 · 732 阅读 · 0 评论 -
go语言中切片的长度和容量详解
切片的长度表示当前包含的。原创 2025-03-18 13:49:36 · 1214 阅读 · 0 评论 -
go语言中数组、map和切片的异同
在Go语言中,数组、切片(slice)和映射(map)是三种常用的数据结构,它们在用途和特性上有显著差异。:元素类型固定(数组和切片元素类型一致,map的键和值类型固定)。:支持通过索引(数组/切片)或键(map)直接访问元素。底层依赖数组,多个切片可共享同一数组(修改相互影响)。:键值对、哈希表实现,适合快速查找和关联数据。可能触发扩容,返回新切片(需重新赋值)。操作,禁止使用切片、函数等不可哈希类型。:动态数组、引用类型,灵活处理动态集合。:定长、值类型,适合固定大小的数据块。长度是类型的一部分,原创 2025-03-18 10:31:35 · 388 阅读 · 0 评论 -
go语言中的sync.Once含义和用法详解
sync.Once是 Go 并发编程中的重要同步原语,特别适用于只需执行一次的初始化场景。其通过精妙的锁+原子操作组合,在保证线程安全的同时实现了高性能。正确使用需要注意避免复制实例、处理好初始化错误,并理解其不可重置的特性。原创 2025-03-11 10:39:42 · 726 阅读 · 0 评论 -
在Go语言中,判断变量是否为“空”(零值或未初始化状态)的方法总结
数据类型判断为空的方法整数变量 == 0字符串变量 == ""布尔变量 == false指针变量 == nil切片len(变量) == 0(推荐)映射len(变量) == 0(推荐)接口变量 == nil或类型断言后判断结构体变量 == 结构体零值(需可比较)数组变量 == 数组零值Age int// 判断整数类型是否为空var i int // 默认为0fmt.Println("判断整数为空: i == 0")// 判断字符串类型是否为空var s string // 默认为""原创 2025-03-06 17:00:00 · 678 阅读 · 0 评论 -
go中协程的生命周期
创建:使用go关键字启动协程。运行:协程被调度器分配线程执行代码。阻塞:协程在等待某些操作时可能进入阻塞状态。结束:协程执行完毕,生命周期结束。垃圾回收:协程结束后,相关资源被清理。Go 语言的协程非常轻量级,可以同时运行成千上万的协程,这是 Go 在处理并发任务时的一个优势。原创 2025-01-10 13:43:40 · 482 阅读 · 0 评论 -
Go语言中的sync.WaitGroup详解
是 Go 标准库sync包中的一个类型,主要用于同步多个协程的执行。它的核心作用是允许主程序或其他协程等待一组协程完成任务后再继续执行。1. 结构noCopy noCopy // 防止被复制state1 atomic.Uint64 // 用于原子操作的状态标志sema uint32 // 用于阻塞和唤醒WaitGroup内部通过原子操作(atomic)和信号量(sema)实现协程的同步。2. 核心方法增加或减少等待的任务数量(计数器)。delta > 0:增加任务数。delta < 0。原创 2025-01-10 13:32:17 · 1164 阅读 · 0 评论 -
go函数的参数怎么设置默认值
你也可以使用 Go 的变长参数来模拟默认值的效果。当调用函数时,如果没有提供某个参数,你可以在函数内检查参数的数量并赋予默认值。")} else {greet() // 使用默认值greet("Alice") // 使用传入值输出使用结构体和指针来模拟默认值。使用变长参数并根据参数个数设置默认值。使用选项模式(构造函数),通过传递可选参数来设置默认值。原创 2025-01-09 14:40:25 · 535 阅读 · 0 评论 -
Go 中的单引号 (‘)、双引号 (“) 和反引号 (`)
单引号 (:用于表示单个字符(rune 类型),例如'A'。双引号 (:用于表示字符串(string 类型),并支持转义字符,例如。反引号 (:用于表示原始字符串,不支持转义字符,可以包含换行符,适用于需要精确保留内容的场景,例如多行字符串、文件路径等。原创 2025-01-09 13:32:27 · 730 阅读 · 0 评论 -
Go中的context 包使用详解
context是 Go 中非常重要的并发工具,适用于传递取消信号、超时控制和请求范围的数据。主要的创建函数包括WithCancel和WithValue,它们允许在不同的场景下创建上下文。context的传递机制让我们能够在多个 goroutine 之间共享控制信息,如取消信号、超时或元数据,避免了手动的锁机制,使并发编程更加简洁和高效。原创 2025-01-08 16:33:41 · 882 阅读 · 0 评论 -
Go怎么实现面向对象编程
结构体是 Go 中用来定义对象的方式,它可以包含多个字段,每个字段有自己的类型。// 定义一个结构体Age int// 创建结构体实例在上面的代码中,Person结构体定义了FirstNameLastName和Age这三个字段。方法是与特定类型相关联的函数,Go 允许我们为结构体类型定义方法。方法的定义类似于函数,但它具有一个接收者(receiver),即哪个类型的方法。// 定义结构体Age int// 为 Person 类型定义一个方法// 为 Person 类型定义一个方法来修改年龄。原创 2025-01-07 14:07:27 · 1032 阅读 · 0 评论 -
Go语言中变量的作用域详解
/ 导出变量:首字母大写// 未导出变量:首字母小写。原创 2025-01-07 13:26:16 · 987 阅读 · 0 评论 -
go怎么终止协程的运行
停止协程的最佳实践:Go没有提供强制停止协程的机制。通常,我们使用channel或 context来通知协程退出。channel:适用于明确通知协程退出,通常用于协程之间的通信。context:适用于传递取消信号,尤其是跨多个协程或者多个模块时。:用于等待协程的完成,确保主程序在协程执行完毕后再退出。time.After:适用于设定超时机制,防止协程无限制运行。原创 2025-01-07 11:50:25 · 563 阅读 · 0 评论 -
go语言处理JSON数据详解
包可以将JSON数据与Go的结构体进行映射。在进行映射时,结构体字段的名称应该与JSON的键匹配,默认情况下是区分大小写的。Go语言处理JSON数据通常涉及到将JSON数据解析成Go结构体,或者将Go结构体序列化为JSON格式。Go结构体在解码时,未出现在JSON中的字段会被赋予结构体类型的零值(如空字符串、零值数值等)。在Go中可以通过嵌套结构体来处理更复杂的JSON数据。的键会变成 JSON 对象的字段名,键值会成为相应的字段值。在 Go 中,JSON 对象的键必须是字符串,因此当你使用。原创 2025-01-06 11:43:43 · 1590 阅读 · 0 评论 -
go语言中的字符串详解
在 Go 中,字符串一旦被创建,其内容是无法被直接修改的。不可变字符串避免了多线程环境下的竞态条件,字符串可以安全地在不同 Goroutines 中传递而不需要额外的同步操作。Go 语言中,字符串是不可变的 UTF-8 编码字节序列。它提供了多种字符串操作方法和包支持,以下是 Go 中字符串操作的详细讲解。如果需要更改字符串的内容,实际上是通过创建一个新的字符串来实现的,而不是在原字符串上进行修改。你可以通过索引访问字符串中的某个字节,但无法通过索引赋值来修改字符串内容。原创 2024-12-25 13:48:36 · 1167 阅读 · 0 评论 -
go语言中的切片含义和用法详解
Go 语言中的切片(slice)是引用类型,它提供了一种灵活的方式去操作一系列具有相同类型的数据。与数组不同,切片的长度不是固定的,可以动态地增长或缩小。切片在 Go 语言中非常常用,因为它们提供了高效且方便的方式来处理数据集合。原创 2024-11-18 15:44:13 · 917 阅读 · 0 评论 -
go语言中的log 包详解
log包默认将日志输出到标准错误流(os.Stderr),但是可以通过方法自定义输出位置。可以将日志输出到文件、网络或其他符合io.Writer接口的目标。log包允许自定义日志的前缀和格式,帮助识别日志的来源或类型。使用方法可以设置日志的前缀,使用可以控制日志的标记。log.SetPrefix("INFO: ") // 设置日志前缀log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // 设置日志标记使用log.New。原创 2024-11-11 13:50:51 · 1152 阅读 · 0 评论 -
go中的fmt 包详解
基本输出函数PrintPrintlnPrintf用于输出内容。格式化占位符:支持多种数据类型的格式化。宽度与精度控制:用于调整输出内容的对齐和精度。错误输出函数FprintFprintlnFprintf用于输出到指定的io.Writer。字符串格式化函数SprintSprintfSprintln用于将内容格式化为字符串。原创 2024-11-11 13:31:24 · 1065 阅读 · 0 评论 -
go语言中io.Writer接口,以及os.Stdout和os.Stderr详解
io.WriterWrite方法:接收一个字节切片参数p,并将内容写入目标位置。返回值:n:表示写入的字节数。err:如果写入过程中出现错误,则返回错误信息。io.Writer可以实现自己的io.Writer,以定义特定的写入逻辑。以下是一个示例,实现了一个将所有内容转换为大写并打印到控制台的自定义io.Writer。import ("fmt""strings"// UpperCaseWriter 是一个自定义的 io.Writer,将所有写入内容转换为大写。原创 2024-11-11 13:23:46 · 797 阅读 · 0 评论 -
go语言中的map类型详解
map是Go语言中的一种内建数据结构,使用键值对存储数据。可以通过make函数创建空map,或通过字面量进行初始化。map支持添加、更新、删除、获取和遍历操作,但它是无序的。map不是线程安全的,并且键类型需支持相等性操作。如果能预估大小,使用make初始化map时指定容量可以优化性能。原创 2024-11-08 17:04:23 · 542 阅读 · 0 评论 -
go语言中如何使用 select 语句处理多通道
在 Go 语言中,select是用于处理多个通道操作的控制结构。它让我们能够同时等待多个通道的操作(如发送或接收)并执行第一个可用的操作。在多 goroutine 并发编程中,select语句非常有用,因为它可以避免复杂的锁操作,提高代码的可读性和并发性能。下面是对select。原创 2024-11-08 16:36:31 · 957 阅读 · 0 评论 -
go语言中的通道(channel)详解
在 Go 语言中,是一种用于在 goroutine(协程)之间传递数据的管道。通道具有类型安全性,即它只能传递一种指定类型的数据。通道是 Go 并发编程的重要特性,能够让多个 goroutine 之间同步地通信,并确保数据传递的安全性。原创 2024-11-08 16:29:56 · 1430 阅读 · 0 评论 -
go语言中的接口(interface)含义和用法详解
接口中的方法声明了一组行为,而具体的类型(struct)可以实现这些行为。// 定义一个接口// 实现接口的结构体在这里,Animal接口定义了Speak方法,而Dog和Cat结构体都实现了Speak方法,因此它们都可以被视为Animal类型。接口是Go语言实现多态和解耦的重要工具。隐式实现机制使类型无需显式声明实现了某接口。空接口可以接受任意类型,常用于需要处理多种类型的场景。类型断言用于将接口类型转换为具体类型。接口组合可以创建更加复杂的接口。原创 2024-11-08 11:20:52 · 427 阅读 · 0 评论 -
go中的类型断言详解
类型断言用于从接口类型提取具体类型的值。是类型断言的安全用法,可以避免panic。非安全的类型断言在断言失败时会导致panic,不推荐在不确定类型时使用。是一种更简便的方式,用于对接口变量进行多种类型的判断。类型断言在处理接口类型时非常有用,可以让我们灵活地使用多态接口,并根据实际需求转换到具体类型来访问特定属性或方法。原创 2024-11-08 11:16:18 · 685 阅读 · 0 评论 -
go语言中的结构体含义和用法详解
结构体是一组字段(field)的集合,每个字段都有自己的类型。...Age int在这里,PersonName(字符串类型)和Age(整数类型)。结构体用于将多个字段组合成复杂的数据类型,是Go语言实现面向对象编程的基础。方法接收者可以是值接收者或指针接收者。匿名字段使结构体“继承”其他结构体的字段。结构体嵌套和接口结合使Go语言具备了高度灵活性,可以实现面向接口编程的设计模式。标签用于标记字段的元数据,通常在序列化和反序列化时使用。原创 2024-11-08 10:53:48 · 786 阅读 · 0 评论 -
go语言中package详解《一》
定义package是 Go 语言的模块化单位,类似于其他编程语言中的库或模块。它将相关功能的代码组织在一起,便于复用和维护。作用:主要用于代码分组和管理,将不同功能模块进行逻辑分割,使得代码更加清晰、易维护。命名规则:一个包通常由多个文件组成,这些文件应该放在同一个目录中,并声明相同的包名。原创 2024-11-07 14:58:25 · 1233 阅读 · 0 评论 -
go语言中的错误处理详解
go语言的错误处理机制原创 2024-11-07 14:11:48 · 1019 阅读 · 0 评论 -
用go实现创建WebSocket服务器
使用Go语言创建WebSocket服务器可以利用现有的库来简化开发过程。是一个非常流行且功能强大的库,适用于Go语言的WebSocket应用。下面是一个详细的步骤指南,介绍如何使用创建一个WebSocket服务器,并实现商品信息的实时广播。原创 2024-11-07 10:31:16 · 633 阅读 · 0 评论 -
go语言中协程详解
协程是一种轻量级的线程,由 Go 运行时管理。它们允许在同一地址空间中并发执行多个函数。使用go关键字可以创建一个新的 Goroutine。原创 2024-10-29 13:10:19 · 427 阅读 · 0 评论 -
go语言中defer用法详解
defer是 Go 语言中一个强大且灵活的工具,适用于资源管理、错误处理和其他需要在函数返回时执。原创 2024-10-28 15:53:14 · 903 阅读 · 0 评论 -
go语言中流程控制语句
Go语言中的流程控制语句包括条件判断、循环和分支控制。原创 2024-10-28 15:26:50 · 388 阅读 · 0 评论 -
go语言中函数的用法
func 函数名(参数列表) 返回值类型 {// 函数体func关键字用于定义函数。函数名是函数的标识符,首字母大写表示可以导出。参数列表包含参数名和参数类型,多个参数用逗号分隔。返回值类型可选,如果函数没有返回值,可以省略。// 定义一个简单的加法函数Go语言中函数是代码复用和逻辑组织的基本单元,支持多返回值、可变参数、递归等特性。可以使用defer来进行资源释放,保证即使函数出错,也能正确清理资源。原创 2024-10-28 15:12:00 · 480 阅读 · 0 评论 -
Go语言中数据类型与变量的用法
在Go语言中,数据类型分为以下几类:基本类型、复合类型和特殊类型。理解这些数据类型可以帮助我们更高效地操作数据和设计程序。原创 2024-10-28 14:46:00 · 1040 阅读 · 0 评论 -
Go语言编译详解
Go语言使用一个名为gc的编译器作为其默认编译器。对于不同的操作系统和架构,Go提供了一个工具链,其中包含了针对特定平台优化过的编译器版本。原创 2024-10-28 13:08:19 · 1064 阅读 · 0 评论 -
运行第一个go程序
对于使用模块的方式,你可以在任何地方创建项目文件夹,并且在这个文件夹中初始化一个新的Go模块,通过执行 go mod init 命令。你可以从Go的官方网站(https://golang.org/dl/)下载适合你操作系统的安装包,并按照指示进行安装。如果你是用GOPATH模式,可以直接运行 go run hello.go 来编译并运行程序。在你的工作目录或者任意目录下创建一个新的.go文件,例如 hello.go。打开终端或命令提示符,切换到包含你的.go文件的目录。原创 2024-10-18 13:20:28 · 581 阅读 · 0 评论