
Go
文章平均质量分 54
Go语言学习专栏
汀风说后端
做一个知识分享者
展开
-
Go语言实现23种设计模式
设计模式是一套被广泛应用于软件开发中的解决问题的经验总结,它可以帮助开发人员设计出更加灵活、可维护和可扩展的代码。本文将探讨使用设计模式的好处,并对常见的设计模式进行分类和介绍。此外,我们还将提供设计模式的相关链接,以便读者深入了解各个设计模式的细节和实例。最后,我们将探讨如何学习设计模式以及如何在日常开发和项目过程中应用设计模式,以及使用设计模式所带来的好处。设计模式是软件开发中重要的工具之一,它可以帮助开发人员设计出灵活、可维护和可扩展的代码。原创 2023-07-18 09:39:45 · 3247 阅读 · 0 评论 -
Go语言标准项目布局
该项目布局主要参考 project-layout 形成的,对 project-layout 某些描述不清的模块进行进一步描述,和对某些模块详细配置不清楚的模块进一步扩展示例。项目布局推荐Go程序目录.├── cmd├── internal└── pkgserver application目录/api该目录用来存放 OpenAPI/Swagger 规则说明, JSON 格式定义, 协议定义文件等。也有可能用来存放具体的对外公开 API.web application 目录/webWe原创 2022-05-22 13:08:59 · 844 阅读 · 0 评论 -
Go 安装可执行程序工具报错以及无法使用的问题
前言在 Go 语言中,我们通常用借用一些工具作为可执行程序使用。但是按照官方文档安装过程中,总是会发生 go get 成功了,但是执行命令的时候总是提示命令未找到的错误,例如:Mac: bash: /Users/libin/go/bin/xxx: No such file or directory、Windows: xxx不是内部或外部命令,也不是可运行的程序或批处理文件在常用的工具中,拿 protoc-gen-go 和 wire 来举例,需要文档的安装命令是:go get github.com/go原创 2022-05-11 11:01:51 · 2548 阅读 · 0 评论 -
Go 手动打造一个简易版的 try cache
func main() { // 手动改造的 try catch 方法 try(func() { fmt.Println("测试方法开始执行") panic("error this try catch") }, func(err interface{}) { fmt.Println("捕获到了异常err:", err) })}// fun 正常的方法// catch 异常处理的方法// interface{} 可以接收所有的异常func try(fun func(), ca.原创 2022-05-08 14:57:22 · 337 阅读 · 0 评论 -
Go test 针对单个测试文件构建失败
go test 可以对项目所有的测试文件(文件名以_test.go结尾的文件)进行单元测试但是,有时候我们只需要对单独的一个文件进行单元测试,有可能出现下面的错误为定义的类型和方法,并且构建失败go test -v showList_test.go # command-line-arguments [command-line-arguments.test]./showList_test.go:8:8: undefined: ShowList./showList_test.原创 2022-05-07 11:25:50 · 583 阅读 · 0 评论 -
Go语言使用protobuf快速入门
前言protobuf 即 Protocol Buffers,是一种轻便高效的结构化数据存储格式,与语言、平台无关,可扩展可序列化。protobuf 性能和效率大幅度优于 JSON、XML 等其他的结构化数据格式。protobuf 是以二进制方式存储的,占用空间小,但也带来了可读性差的缺点。protobuf 在通信协议和数据存储等领域应用广泛。Protobuf 在 .proto 定义需要处理的结构化数据,可以通过 protoc 工具,将 .proto 文件转换为 C、C++、Golang、Java、P原创 2022-01-15 16:01:35 · 4876 阅读 · 0 评论 -
Go:专属二进制编码方式Gob
Gob 是 Go 自己的以二进制形式序列化和反序列化程序数据的格式;可以在 encoding 包中找到。这种格式的数据简称为 Gob (即 Go binary 的缩写)。类似于 Python 的 “pickle” 和 Java 的 “Serialization”。Gob 通常用于远程方法调用(RPCs,参见 15.9 的 rpc 包)参数和结果的传输,以及应用程序和机器之间的数据传输。 它和 JSON 或 XML 有什么不同呢?Gob特定地用于纯 Go 的环境中,例如,两个用 Go 写的服务之间的通信。.原创 2022-01-14 22:20:09 · 1488 阅读 · 0 评论 -
Go常用命令
Go语言自带有一套完整的命令操作工具,可以通过在命令行中执行go来查看它们go build这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。如果是普通包,就像编写的mymath包那样,当执行go build之后,它不会产生任何文件。如果需要在$GOPATH/pkg下生成相应的文件,那就得执行go install。如果是main包,当执行go build之后,它就会在当前目录下生成一个可执行文件。如果需要在$GOPATH/bin下生成相应的文件,需要执行go in原创 2021-11-25 12:46:01 · 203 阅读 · 0 评论 -
go结构体与JSON序列化
代码示例package mainimport ( "encoding/json" "fmt")type dog struct { Name string `json:"name" db:"name"` Year int `json:"year"`}func main() { d1 := dog{ Name: "布迪", Year: 2020, } // 序列化 b,err := json.Marshal(d1) if err!=nil { fmt.Print原创 2021-09-24 18:53:06 · 261 阅读 · 0 评论 -
go结构体嵌套和用结构体实现模拟“继承”
什么是结构体嵌套一个结构体中可以嵌套包含另一个结构体或结构体指针示例结构体嵌套package mainimport "fmt"// 桌子结构体type table struct { material string shape int com common // 嵌套结构体}// 被嵌套的结构体定义type common struct { year int}func main() { // 嵌套结构体定义和输出方法 s1 := table{ material:原创 2021-09-24 10:12:24 · 1066 阅读 · 0 评论 -
go语言实现简单的学生管理系统
介绍总结go语言的基础学习,通过两种方式实现简单的学生信息管理系统方法一package mainimport ( "fmt" "os")// 定义所有学生信息var studentData map[int]*student// 定义学生type student struct { id int64 name string score int}// 初始化分配内存空间func init() { studentData = make(map[int]*student,原创 2021-09-20 17:42:36 · 1361 阅读 · 0 评论 -
理解 Go 语言中的方法和接收者
Go语言中的 方法(Method) 是一种作用于特定类型变量的函数。这种特定类型变量叫做 接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。方法的定义格式如下:func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) { 函数体}其中,接收者变量:接收者中的参数变量名在命名时,官方建议使用接收者类型名称首字母的小写,而不是self、this之类的命名。例如,Person类型的接收者变量应该命名为 p,Connector类型的接收者变量应该原创 2021-09-16 23:17:58 · 4503 阅读 · 0 评论 -
Go中的构造函数
构造函数介绍Golang作为结构化的语言是没有面向对象语言中的构造方法的,不过可以通过一些方式实现类似的面向对象语言中构造方法的效果。因为 struct 是值类型,如果结构体比较复杂的话,值拷贝 性能开销会比较大,所以该构造函数返回的是结构体指针类型。规范New 关键字开头返回结构体指针示例package mainimport "fmt"// 结构体type dog struct { name string}// NewDog 构造函数func NewDog(n原创 2021-09-16 22:29:06 · 603 阅读 · 0 评论 -
Go中的 for range 结合 & 取地址的趣味小问题
前言在网上发现一道golang 中的 for range 和 & 取地址结合的题目,感觉很有趣,先来看看演示代码。演示代码package mainimport "fmt"type student struct { name string age int}func main() { m := make(map[string]*student) stus := []student{ {name: "小王子", age: 18}, {name: "娜扎", age:.原创 2021-09-16 10:45:11 · 440 阅读 · 0 评论 -
Go中的内存对齐演示
机构体占用一块连续的内存:package mainimport "fmt"type test struct { a int8 b int8 c int8 d int8}func main() { type test struct { a int8 b int8 c int8 d int8 } n := test{ 1, 2, 3, 4, } fmt.Printf("n.a %p\n", &n.a) fmt.Printf("n.b %p\n",原创 2021-09-15 16:03:00 · 155 阅读 · 0 评论 -
Go结构体初始化的几种方式
new初始化结构体指针可以通过使用new关键字对结构体进行实例化,得到的是结构体的地址。 格式如下:package mainimport "fmt"type stu struct { name,address string}func main() { // 结构体指针1 var stu1 = new(stu) stu1.name = "张三" (*stu1).address = "北京" fmt.Println(stu1)}取结构体地址实例化使用&对结构体进行取原创 2021-09-15 15:07:59 · 4815 阅读 · 0 评论 -
go 匿名函数和闭包
匿名函数匿名函数多用于实现回调函数和闭包。函数当然还可以作为返回值,但是在Go语言中函数内部不能再像之前那样定义函数了,只能定义匿名函数。匿名函数就是没有函数名的函数,匿名函数的定义格式如下:func(参数)(返回值){ 函数体}匿名函数因为没有函数名,所以没办法像普通函数那样调用,所以匿名函数需要保存到某个变量或者作为立即执行函数:func main() { // 匿名函数 sumFuns := func(x int, y int) int { return x原创 2021-08-31 14:44:13 · 267 阅读 · 0 评论