Golang
文章平均质量分 86
golang学习
domorejojo
这个作者很懒,什么都没留下…
展开
-
Protobuf 命令学习
以下是学习笔记目录:文章目录protobuf 简介0. protobuf 安装1. -proto_path (-I)选项2. --go_out 选项3. 指定哪个proto源头文件4. 执行多个proto文件5. 指定grpc选项,生成grpc功能protobuf 简介微服务很流行,go语言也很流行,这两者加起来的grpc服务也很流行。其中 grpc 使用的是ProtoBuf 作为内容传输中间件,看下它的说明:protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,原创 2021-04-12 14:31:05 · 3583 阅读 · 1 评论 -
probuf学习笔记
probuf学习笔记以下是目录,正在逐步学习和更新中。文章目录probuf学习笔记官网文档0. 反人类1. message2. package3. option4. 注释5. 保留字 reserved6. 枚举enum7. 他消息类型(repeated)8. import 导入另一个proto文件9. 嵌套类型(嵌套message)10. 任意类型(Any)11. 其中之一(Oneof)12. Map13. 定义Services上一节学习了protoc命令的用法,以及配合生成grpc的相关。这一节,来原创 2021-04-12 11:37:53 · 404 阅读 · 0 评论 -
go反射实例
go反射实例文章目录go反射实例1. go反射结构体类型切片2. go反射结构体3. go反射结构体嵌套4. 反射切片5. 通过反射将struct切片如何转换为map切片6. 将map转换为struct7. 通过反射将map切片转换为struct切片1. go反射结构体类型切片type Man struct { Id int Name string}s1 := make([]Man, 0)s1 = append(s1, Man{1, "a"})s1 = append(s1, Man{原创 2021-04-12 11:32:01 · 997 阅读 · 0 评论 -
go里面几个不同的字符串连接符的效率测试
go里面几个不同的字符串连接符的效率测试标签(空格分隔): Golang在搞mysql的orm框架,在处理dsn时候,考虑字符串拼接。有很如下选择:直接用+strings.Joinstrings.Bandlefmt.Sprintf分别benchmark测试一下,直接上代码跑一下:func dsnJson (Username string, Password string, Ip string, Port int64, Dbname string) string { dsn := st原创 2021-04-12 11:31:11 · 253 阅读 · 0 评论 -
go中的http包的学习
go中的http包的学习Go语言通过引入net/http包来实现http网络访问,并提供HTTP客户端和服务端的实现。先看服务端的实现,几行代码就可以启动1个HTTP服务,还是很简单的。package mainimport ( "fmt" "net/http")func getHandler(w http.ResponseWriter, r *http.Request){ _, _ = fmt.Fprintf(w, "hello go!")}func main(){ //绑定路原创 2020-09-04 20:04:53 · 528 阅读 · 0 评论 -
go中自带log库的使用
go中自带log库的使用文章目录go中自带log库的使用log库的使用自定义内容输出输出到日志文件里调用log类的New方法log库的使用log库的导入,很简单,import log 即可:package mainimport ( "log")func main(){ log.Println("Come with fatal,exit with 1")}打印一下,默认会输出在终端里的标准输出:$ go run log.go2020/08/31 19:14:20 Com原创 2020-08-31 20:01:56 · 1756 阅读 · 0 评论 -
go中mysql的使用
go中mysql的使用文章目录go中mysql的使用1. 导入mysql驱动2. 连接mysql3. 插入数据 (insert)4. 两种方式的比较批量插入删除数据(delete)更新(update)查询(select)事务(trans)1. 导入mysql驱动mysql驱动,我们用对的最多的是github.com/go-sql-driver/mysql,一些很多框架的mysql驱动也是这个。之所以要导入驱动,是因为golang里面,并没有实现mysql的各项功能,它只定义了一系列sql方便的接口,原创 2020-08-31 17:48:46 · 622 阅读 · 0 评论 -
go中实现接口的几种方式
go中实现接口的几种方式//定义1个接口student,它包含1个 StudentName 方法type student interface { StudentName() string}//定义1个结构体type Boy struct { Name string}//给他这个结构体绑定一个方法 StudentName。这样就表示它实现了 student接口func (a Boy) StudentName() string { return a.Name}上面是常见的接口申原创 2020-08-21 18:13:28 · 10467 阅读 · 2 评论 -
go中int和string的转换
go中int和string的转换0、int的长度go语言中的int的大小是和操作系统位数相关的,如果是32位操作系统,int类型的大小就是4字节。如果是64位操作系统,int类型的大小就是8个字节。可以用 strconv.IntSize来打印,结果是64bit,也就是8个字节,int == int64。https://blog.csdn.net/FromTheWind/article/details/105862844// int8 表示一个字节,也是一个byte var i1 int = 1原创 2020-08-12 11:54:58 · 5874 阅读 · 0 评论 -
go中json的使用
go中json的使用文章目录go中json的使用encode 编码struct 编码map 编码[] 数组/切片加码deocode 解码go 原生提供了json的加码解码支持,import "encoding/json"就可以了。encode 编码json的 encode 加码方法是:func Marshal(v interface{}) ([]byte, error)正是因为参数是接口 interfae{},所以,理论上可以传入任何数据。struct 编码我们一般都用用结构体作为数据源原创 2020-08-08 17:46:28 · 433 阅读 · 0 评论 -
golang中iota的使用
文章目录iota是啥东西1、iota只能在常量的表达式中使用。2、每次 const 出现时,都会让 iota 初始化为0,并且换行自动+12、省略赋值,换行自动+13、自定义类型4、忽略定义跳过4、位掩码表达式5、定义数量级6、多个常量定义在1行的情况7、中间插队iota是啥东西iota是golang语言的常量计数器,只能在常量的表达式中使用。iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块原创 2020-08-05 12:30:40 · 665 阅读 · 0 评论 -
34. 反射(Reflection)
欢迎阅读Golang系列教程第34篇:反射。反射是Go中的高级用法之一。我将尽可能用简单清晰明了的方式来讲清楚它的用法。文章目录什么是反射?为什么需要检查变量并找到其类型?reflect packagereflect.Type 和 reflect.Valuereflect.KindNumField() 和 Field() 方法Int() 和 String()方法完成程序什么是反射?反射是程...原创 2019-12-27 19:20:40 · 423 阅读 · 0 评论 -
21.go协程(Goroutine)
原文:https://golangbot.com/goroutines/欢迎来到Golang 系列教程的第 21 章。 在前面的教程里,我们探讨了并发,以及并发与并行的区别。本教程则会介绍在 Go 语言里,如何使用 Go 协程(Goroutine)来实现并发。Go 协程是什么?Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创...原创 2018-03-19 14:00:55 · 1313 阅读 · 0 评论 -
14.字符串
原文: https://golangbot.com/strings/欢迎阅读Golang 系列教程的第 14 章。由于和其他语言相比,字符串在 Go 语言中有着自己特殊的实现,因此在这里需要被特别提出来。什么是字符串?Go 语言中的字符串是一个字节切片。把内容放在双引号”“之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串的简单示例。package main...原创 2018-03-14 10:05:11 · 985 阅读 · 0 评论 -
15.指针
原文:https://golangbot.com/pointers/欢迎来到Golang 系列教程的第 15 章。什么是指针?指针是一种存储变量内存地址(Memory Address)的变量。如上图所示,变量 b 的值为 156,而 b 的内存地址为 0x1040a124。变量 a 存储了 b 的地址。我们就称 a 指向了 b。指针的声明指针变量的类型为 *T,...原创 2018-03-14 10:05:45 · 1116 阅读 · 0 评论 -
16.结构体
原文:https://golangbot.com/structs/欢迎来到Golang 系列教程的第 16 章。什么是结构体?结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。例如,一个职员有 firstName、lastName 和 age 三个属性,而把这些属性组合在一个结构体 empl...原创 2018-03-14 10:06:16 · 1270 阅读 · 0 评论 -
28.多态 - golang中的面向对象
原文:https://golangbot.com/polymorphism/欢迎访问Golang 系列教程中的第28章。Go中的多态性是通过接口实现的。正如我们已经讨论过的,接口可以在Go中隐式实现。如果一个类型为接口中声明的所有方法提供了定义,则实现一个接口。让我们来看看在接口的帮助下Go如何实现多态。使用接口的多态性定义接口的所有方法的任何类型都表示隐式实现该接口。类型...原创 2018-03-20 13:48:42 · 355 阅读 · 0 评论 -
29.推迟(defer)
原文:https://golangbot.com/defer/欢迎访问Golang 系列教程中的第29章。什么是延迟(defer)?Defer语句用于在返回defer语句的函数之前执行函数调用。这个定义可能看起来很复杂,但通过一个例子很容易理解。例如package mainimport ( "fmt")func finished() { ...原创 2018-03-20 13:49:27 · 362 阅读 · 0 评论 -
30.错误处理
原文:https://golangbot.com/error-handling/欢迎访问Golang 系列教程中的第30章。什么是错误?错误指程序中出现异常情况。比方说, 我们正在尝试打开一个文件, 文件系统中不存在该文档。这是一个异常情况, 它表示为一个错误。Go中的错误是普通的旧值。错误使用内置error类型表示。就像在type中构建的任何其他类型, 如 int、flo...原创 2018-03-20 13:50:08 · 615 阅读 · 0 评论 -
31.自定义错误
原文:https://golangbot.com/custom-errors/欢迎访问Golang 系列教程中的第31章。在上一教程中, 我们了解了如何在 go 中表示错误以及如何处理标准库中的错误。我们还学习了如何从标准库错误中提取更多的信息。本教程讨论如何创建我们自己的自定义错误, 我们可以在我们创建的函数和包中使用它。我们还将使用标准库所采用的相同技术来提供有关我们的自定...原创 2018-03-20 13:51:07 · 449 阅读 · 0 评论 -
32.恐慌和恢复 (Panic and Recover)
原文:https://golangbot.com/panic-and-recover/欢迎访问Golang 系列教程中的第32章。也是本系列的最后一章。什么是恐慌?在 go 程序中处理异常情况的惯用方法是使用错误(errors)。对于程序中出现的大多数异常情况, 使用错误都是足够的。但在某些情况下,程序不能在异常情况之后继续执行。在这种情况下, 我们可以使用panic来终止...原创 2018-03-20 13:52:00 · 1417 阅读 · 0 评论 -
33. 头等函数(first-class function)
原文:https://golangbot.com/first-class-functions/欢迎访问 Golang 教程33教程系列.什么是头等函数?支持头等函数的语言允许将函数分配给变量,作为参数传递给其他函数并从其他函数返回。 Go就支持这一功能。在本教程中, 我们将讨论第一类函数的语法和各种用例。匿名函数让我们从一个将函数赋给变量的简单示例开始。packag...原创 2018-09-14 17:18:29 · 2173 阅读 · 0 评论 -
13.Map
原文:https://golangbot.com/maps/欢迎来到Golang 系列教程第 13 章。什么是 map ?map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。如何创建 map ?通过向 make 函数传入键和值的类型,可以创建 map。make(map[type of key]type of value) 是创...原创 2018-03-14 10:04:34 · 333 阅读 · 0 评论 -
12.变参函数
原文:https://golangbot.com/variadic-functions/欢迎来到Golang 系列教程的第12章。什么是变参函数可变参数函数是一种参数个数可变的函数。语法如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最后一个参数。请注意只有函数的最后一个参数才允许是可变的。通过一些例子理解可变参数函数如何工作...原创 2018-03-14 10:03:56 · 331 阅读 · 0 评论 -
11.数组和切片
原文:https://golangbot.com/arrays-and-slices/欢迎来到Golang系列教程的第 11 章。在本章教程中,我们将讨论 Go 语言中的数组和切片。数组数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型...原创 2018-03-14 10:03:18 · 616 阅读 · 0 评论 -
26.用结构体替代类-golang中的面向对象
原文: https://golangbot.com/structs-instead-of-classes/欢迎访问Golang 系列教程中的第26章。是否面向对象?go不是一个纯面向对象的编程语言。从 “Go’s FAQs” (go 常见问题解答)中取出的摘录回答了go 是否为面向对象的问题。Yes and no. Although Go has types and metho...原创 2018-03-19 14:04:37 · 648 阅读 · 0 评论 -
25.互斥锁 (mutex)
原文:https://golangbot.com/mutex/欢迎访问 Golang 系列教程中的第25章。在本教程中, 我们将了解互斥体。我们还将学习如何使用互斥体和信道来解决竞争条件.临界区在跳转到互斥体之前, 必须了解并发编程中关键节的概念。当一个程序同时运行时, 修改共享资源的代码部分不应同时由多个Goroutines访问。修改共享资源的这部分代码称为 “关键节”。例如...原创 2018-03-19 14:03:30 · 856 阅读 · 0 评论 -
24.选择(select)
原文:https://golangbot.com/select/欢迎来到Golang 系列教程的第 24 章。 什么是 select?select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case ...原创 2018-03-19 14:02:45 · 346 阅读 · 0 评论 -
23.缓冲信道和工作池
原文:https://golangbot.com/buffered-channels-worker-pools/欢迎来到Golang 系列教程的第 23 章。什么是缓冲信道?在上一教程里,我们讨论的主要是无缓冲信道。我们在信道的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况,才会阻塞向缓冲信道(Buf...原创 2018-03-19 14:02:07 · 480 阅读 · 0 评论 -
22.信道(channel)
原文:https://golangbot.com/channels/欢迎来到Golang 系列教程的第 22 章。 在上一教程里,我们探讨了如何使用 Go 协程(Goroutine)来实现并发。我们接着在本教程里学习信道(Channel),学习如何通过信道来实现 Go 协程间的通信。 什么是信道?信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到另一端,通...原创 2018-03-19 14:01:26 · 1254 阅读 · 0 评论 -
20.并发介绍
原文:https://golangbot.com/concurrency/欢迎来到我们Golang 系列教程的第 20 章。 Go 是并发式语言,而不是并行式语言。在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。 并发是什么?并发是指立即处理多个任务的能力。一个例子就能很好地说明这一点。 我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然...原创 2018-03-19 14:00:26 · 533 阅读 · 0 评论 -
19.接口(二)
原文:https://golangbot.com/interfaces-part-2/欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。实现接口:指针接受者与值接受者在上一章的教程”接口(一)”中,所有示例里面,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实...原创 2018-03-19 13:59:54 · 310 阅读 · 0 评论 -
18.接口(一)
原文:https://golangbot.com/interfaces-part-1/欢迎来到Golang 系列教程第 18 章。接口共有两个教程,这是我们接口的第一个教程。 什么是接口?在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。 在 Go 语言中,接口就是方法签名(Me...原创 2018-03-19 13:58:24 · 317 阅读 · 0 评论 -
17.方法
原文:https://golangbot.com/methods/欢迎来到 Golang 系列教程的第 17 章。什么是方法?方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。下面就是创建一个方法的语法。func (t Type) methodName(para...原创 2018-03-19 13:57:20 · 1172 阅读 · 0 评论 -
27.用组合代替继承-golang中的面向对象
原文:https://golangbot.com/inheritance/欢迎访问Golang 系列教程中的第27章。go 不支持继承(inheritance), 但是它支持组合(composition)。构图的一般定义是 “放在一起”。组合的一个示例是小轿车。汽车由轮子、引擎和其他各种各样的零件组成。通过嵌入结构进行组合通过将一个结构类型嵌入到另一个中, 可以在Go中实现...原创 2018-03-20 13:47:44 · 931 阅读 · 1 评论 -
1.介绍和安装
原文:https://golangbot.com/golang-tutorial-part-1-introduction-and-installation/介绍与安装这是我们 Golang 系列教程的第一个教程。Golang 是什么Go 亦称为 Golang (译注:按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编...原创 2018-03-13 16:26:24 · 409 阅读 · 0 评论 -
10.switch 语句
原文:https://golangbot.com/switch这是 Golang 系列教程中的第 10 章。switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 if else 子句的常用方式。看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字。比如...原创 2018-03-14 10:02:19 · 352 阅读 · 0 评论 -
9.循环
原文: https://golangbot.com/loops/这是 Go 语言系列教程的第 9 章循环语句是用来重复执行某一段代码。for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环。for 循环语法for initialisation; condition; post { }初始化语句只...原创 2018-03-14 10:01:31 · 349 阅读 · 0 评论 -
8.if-else 语句
原文:https://golangbot.com/if-statement/这是我们Golang 系列教程的第 8 章。if 是条件语句。if 语句的语法是if condition { }如果 condition 为真,则执行 { 和 } 之间的代码。不同于其他语言,例如 C 语言,Go 语言里的 { } 是必要的,即使在 { } 之间只有一条语句。if 语...原创 2018-03-14 10:00:16 · 343 阅读 · 0 评论 -
7.包
原文: https://golangbot.com/packages/这是 Golang 系列教程的第7章。什么是包,为什么使用包?到目前为止,我们看到的 Go 程序都只有一个文件,文件里包含一个 main函数和几个其他的函数。在实际中,这种把所有源代码编写在一个文件的方法并不好用。以这种方式编写,代码的重用和维护都会很困难。而包(Package)解决了这样的问题。包用于组织 ...原创 2018-03-14 09:57:42 · 297 阅读 · 0 评论