随笔分类 - Go专题精讲
摘要:打造属于自己的工具集:深入探索 Go 语言中的 flag 库 在编程的世界里,处理命令行参数是一项非常基础且重要的任务。无论你是编写一个简单的脚本还是开发一个复杂的应用程序,都可能需要从命令行接收用户输入。在Go语言中,标准库中的flag包为我们提供了一种简洁而强大的方式来解析命令行参数。本文将带你
阅读全文
摘要:Go Redis专题精讲 一、介绍 https://github.com/redis/go-redis 1.1、客户端列表 go-redis提供各种类型的客户端: Redis 单节点客户端 Redis 集群客户端 Redis 哨兵客户端 Redis 分片客户端 Redis 通用客户端 go-redi
阅读全文
摘要:使用包实现代码重用 本章介绍如下内容。 导入包。 使用第三方包。 安装第三方包。 管理第三方依赖。 创建包。 在 Go 语言中,包用于将代码编组,以便在 Go 程序中导入并使用它们。 1.1 导入包 为方便理解如何导入并使用包,先来个简单的程序。 package main import { "fmt
阅读全文
摘要:package main import ( "context" "fmt" "github.com/sashabaranov/go-openai" "github.com/chzyer/readline" ) func main() { client := openai.NewClient("")
阅读全文
摘要:常见 strings 操作 https://pkg.go.dev/strings Go Version: 1.20.1 一、概要 Package strings implements simple functions to manipulate UTF-8 encoded strings. (Pac
阅读全文
摘要:双引号、单引号字符串的区别 双引号:双引号括起来的字符串允许有转义字符。 反引号:反引号扩起来的字符串称作 "原始字符串",其中有转义字符的话不会进行转义,会被原样输出。 反引号括起来的原始字符串中不能有反引号这个字符串本身。 1、双引号 示例代码: package main import "fmt
阅读全文
摘要:byte类型的切片([]byte)与string Go 语言中,表示字符串的数据类型是 string。我们知道字符串是由字节组成,而字节序列在 Go 语言中是用 byte 类型的切片([]byte)表达,因此 string 类型和 []byte 是可以互相转化的。 package main impo
阅读全文
摘要:常见报错: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH% 一、背景 操作系统:windows 10 专业版 Go版本:go version go1.19.4 windows/amd64 开发工
阅读全文
摘要:反射的类型对象(reflect.Type) 反射 是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可
阅读全文
摘要:示例:工厂模式自动注册——管理多个包的结构体 本例利用包的 init 特性,将 cls1 和 cls2 两个包注册到工厂,使用字符串创建这两个注册好的结构实例。 代码1-1 类工厂(具体文件:../clsfactory/base/factory.go) package base //类接口 type
阅读全文
摘要:导入包(import)——在代码中使用其他的代码 要引用的其他包的标识符,可以使用 import 关键字,导入的包名使用双引号包围,包名是从 GOPATH 开始计算的路径,使用 "/" 进行路径分隔。 1、默认导入的方法 导入有两种基本格式,即单行导入和多行导入,两种导入方法的导入代码效果是一致的。
阅读全文
摘要:导出标识符——让外部访问包的类型和值 在 Go 语言中,如果想在一个包里引用另外一个包里的标识符(如 类型、变量、常量等)时,必须首先将被引用的标识符导出,将要导出的标识符的首字母大写就可以让引用者可以访问这些标识符了。 1、导出包内标识符 标识符首字母为小写,这些标识符可以在包内自由使用,但是包外
阅读全文
摘要:创建包 package——编写自己的代码扩展 包(package)是多个 Go 源码的集合,是一种高级的代码复用方案,Go 语言默认为我们提供了很多包,如 fmt、os、io 包等,开发者可以根据自己的需要创建自己的包。 包要求在同一个目录下的所有文件的第一行添加如下代码,以标记该文件归属的包: p
阅读全文
摘要:工作目录(GOPATH) Go 语言的源码复用建立在包(package)基础之上。Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同样以包的方式进行引用。 Go 语言的包与文件夹一一对应,所有与包相关的操作,必须依赖于工作目录(GOPAT
阅读全文
摘要:示例:实现有限状态机(FSM) 有限状态机(Finite-State Machine,FSM),表示有限个状态及在这些状态间的转移和动作等行为的数学模型。 本例将实现状态接口、状态管理器及一系列的状态和使用状态的逻辑。 1、状态的概念 状态机中的状态与状态间能够自由转换。但是现实当中的状态却不一定能
阅读全文
摘要:类型分支——批量判断空接口中变量的类型 Go 语言的 switch 不仅可以像其他语言一样实现数值、字符串的判断,还有一种特殊的用途——判断一个接口内保存或实现的类型。 1、类型断言的书写格式 switch 实现类型分支时的写法格式如下: switch 接口变量.(type) { case 类型1:
阅读全文
摘要:示例:使用空接口实现可以保存任意值的字典 空接口可以保存任何类型这个特性可以方便地用于容器的设计。 下面例子使用 map 和 interface{} 实现了一个字典。字典在其他语言中的功能和 map 类似,可以将任意类型的值做成键值对保存,然后进行找回,遍历操作。 代码1-1 实现字典(/dict/
阅读全文
摘要:空接口类型(interface{})——能保存所有值的类型 空接口是接口类型的特殊形式,空接口没有任何方法,因此任何类型都无须实现空接口。 从实现的角度看,任何值都满足这个接口的需求。因此空接口类型可以保存任何值,也可以从空接口中取出原值。 提示: 空接口类型类似于 C# 或者 Java 语言中的
阅读全文
摘要:在接口和类型间转换 Go 语言中使用的接口断言(type assertions)将接口转换成另外一个接口,也可以将接口转换为另外的类型。接口的转换在开发中非常常见,使用也非常频繁。 1、类型断言的格式 类型断言的基本格式如下: t := i.(T) i 代表接口变量。 T 代表转换的目标类型。 t
阅读全文
摘要:接口的嵌套组合——将多个接口放在一个接口内 在 Go 语言中,不仅结构体与结构体之间可以嵌套,接口与接口之间也可以通过嵌套创造出新的接口。 接口与接口嵌套组合而成了新接口,只要接口的所有方法被实现,则这个接口中的所有嵌套接口的方法均可以被调用。 1、系统包中的接口嵌套组合 Go 语言中的 io 包中
阅读全文