- 博客(260)
- 资源 (5)
- 收藏
- 关注
原创 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 3635 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 432
原创 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 1046
原创 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 272
原创 PHP8新增功能介绍
万众期待的世界上最好的编程语言——PHP,最新版PHP8在2020-11-26正式版发布了。它包含了很多新功能与优化项, 包括命名参数、联合类型、注解、构造器属性提升、match 表达式、nullsafe 运算符、JIT,并改进了类型系统、错误处理、语法一致性。今天来具体分析些这些主要的新的更新点:文章目录1. JIT编译 (Just In Time Compilation)1. 不开启Opcache2. 开启Opcacheh后的执行过程3. 开启JIT后的执行过程4. JIT的配置。5. 性能对比2
2020-12-02 11:12:32 872
原创 Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘addtime‘ at row问题解决
设置sql_mode。mysql > SET SQL_MODE='ALLOW_INVALID_DATES';
2020-11-17 14:37:41 1178
原创 swoole里面的全局变量的误区和解决方案
swoole里面的全局变量的误区和解决方案首先,抛出答案swoole里面的全局变量,比如:global $a, static,在同一个work进程里面,它是不会在请求结束后自动销毁和还原的,特别是你有做一些累加或者修改的操作,如果你不主动销毁复原,这个work的下一个请求进来,这些全局变量的值依然会存在,不会初始化。官方文档不同work之间的全局变量,是相互隔离的,并不会产生影响。官方文档我们举个例子来看,为了防止每次请求可能分到不同的work里面,我们设置只启动1个work进程:<
2020-09-11 13:45:36 2531
原创 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 548
原创 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 1778
原创 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 645
原创 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 10562 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 5899
原创 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 453
原创 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 684
原创 学习Makefile
Makefile 是Linux系统中用来生成文件、整理和管理命令的配置文件。你可以这样理解,它就是一个key:value 的shell 命令(系统或者软件的命令)集合。你通过执行和管理key,来执行 value (shell命令)。文章目录Makefile 配置文件生成Makefile 命令使用如何运行**target(目标)****prerequisites 前置条件(依赖)****prerequisites 前置条件(依赖)为空****command 命令**其他例子Makefile 配置文件生.
2020-08-05 11:55:30 393
原创 JWT介绍
文章目录JWT介绍传统跨域登陆认证的方式JWT的验证方式JWT的数据结构header 头部payload 载荷signature 签名base64UrlEncode 编码JWT 使用JWT 校验真伪JWT PHP库JWT Golang库总结JWT介绍JWT (音: jot ) 是目前最流行的跨域认证解决方案,全称JSON Web Token,基于JSON的开放标准((RFC 7519) ,以t...
2020-04-29 15:30:09 593
原创 34. 反射(Reflection)
欢迎阅读Golang系列教程第34篇:反射。反射是Go中的高级用法之一。我将尽可能用简单清晰明了的方式来讲清楚它的用法。文章目录什么是反射?为什么需要检查变量并找到其类型?reflect packagereflect.Type 和 reflect.Valuereflect.KindNumField() 和 Field() 方法Int() 和 String()方法完成程序什么是反射?反射是程...
2019-12-27 19:20:40 444
原创 swoole深入学习 8. 协程2
swoole深入学习 8. 协程swoole 在 2.0正式版加入了协程功能。这一章主要来深究一下在Swoole中如何使用协程。什么是协程?协程(Coroutine)也叫用户级线程, 很多人分不清楚协程和线程和进程的关系。进程(Process)是操作系统分配资源的单位,线程(Thread)是进程的一个实体,是CPU调度和分派的基本单位。线程不能够独立执行,必须依存在应用程序中,由应用程...
2019-06-27 10:10:04 3837 1
原创 33. 头等函数(first-class function)
原文:https://golangbot.com/first-class-functions/欢迎访问 Golang 教程33教程系列.什么是头等函数?支持头等函数的语言允许将函数分配给变量,作为参数传递给其他函数并从其他函数返回。 Go就支持这一功能。在本教程中, 我们将讨论第一类函数的语法和各种用例。匿名函数让我们从一个将函数赋给变量的简单示例开始。packag...
2018-09-14 17:18:29 2193
原创 32.恐慌和恢复 (Panic and Recover)
原文:https://golangbot.com/panic-and-recover/欢迎访问Golang 系列教程中的第32章。也是本系列的最后一章。什么是恐慌?在 go 程序中处理异常情况的惯用方法是使用错误(errors)。对于程序中出现的大多数异常情况, 使用错误都是足够的。但在某些情况下,程序不能在异常情况之后继续执行。在这种情况下, 我们可以使用panic来终止...
2018-03-20 13:52:00 1439
原创 31.自定义错误
原文:https://golangbot.com/custom-errors/欢迎访问Golang 系列教程中的第31章。在上一教程中, 我们了解了如何在 go 中表示错误以及如何处理标准库中的错误。我们还学习了如何从标准库错误中提取更多的信息。本教程讨论如何创建我们自己的自定义错误, 我们可以在我们创建的函数和包中使用它。我们还将使用标准库所采用的相同技术来提供有关我们的自定...
2018-03-20 13:51:07 464
原创 30.错误处理
原文:https://golangbot.com/error-handling/欢迎访问Golang 系列教程中的第30章。什么是错误?错误指程序中出现异常情况。比方说, 我们正在尝试打开一个文件, 文件系统中不存在该文档。这是一个异常情况, 它表示为一个错误。Go中的错误是普通的旧值。错误使用内置error类型表示。就像在type中构建的任何其他类型, 如 int、flo...
2018-03-20 13:50:08 627
原创 29.推迟(defer)
原文:https://golangbot.com/defer/欢迎访问Golang 系列教程中的第29章。什么是延迟(defer)?Defer语句用于在返回defer语句的函数之前执行函数调用。这个定义可能看起来很复杂,但通过一个例子很容易理解。例如package mainimport ( "fmt")func finished() { ...
2018-03-20 13:49:27 373
原创 28.多态 - golang中的面向对象
原文:https://golangbot.com/polymorphism/欢迎访问Golang 系列教程中的第28章。Go中的多态性是通过接口实现的。正如我们已经讨论过的,接口可以在Go中隐式实现。如果一个类型为接口中声明的所有方法提供了定义,则实现一个接口。让我们来看看在接口的帮助下Go如何实现多态。使用接口的多态性定义接口的所有方法的任何类型都表示隐式实现该接口。类型...
2018-03-20 13:48:42 371
原创 27.用组合代替继承-golang中的面向对象
原文:https://golangbot.com/inheritance/欢迎访问Golang 系列教程中的第27章。go 不支持继承(inheritance), 但是它支持组合(composition)。构图的一般定义是 “放在一起”。组合的一个示例是小轿车。汽车由轮子、引擎和其他各种各样的零件组成。通过嵌入结构进行组合通过将一个结构类型嵌入到另一个中, 可以在Go中实现...
2018-03-20 13:47:44 950 1
原创 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 665
原创 25.互斥锁 (mutex)
原文:https://golangbot.com/mutex/欢迎访问 Golang 系列教程中的第25章。在本教程中, 我们将了解互斥体。我们还将学习如何使用互斥体和信道来解决竞争条件.临界区在跳转到互斥体之前, 必须了解并发编程中关键节的概念。当一个程序同时运行时, 修改共享资源的代码部分不应同时由多个Goroutines访问。修改共享资源的这部分代码称为 “关键节”。例如...
2018-03-19 14:03:30 881
原创 24.选择(select)
原文:https://golangbot.com/select/欢迎来到Golang 系列教程的第 24 章。 什么是 select?select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case ...
2018-03-19 14:02:45 364
原创 23.缓冲信道和工作池
原文:https://golangbot.com/buffered-channels-worker-pools/欢迎来到Golang 系列教程的第 23 章。什么是缓冲信道?在上一教程里,我们讨论的主要是无缓冲信道。我们在信道的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况,才会阻塞向缓冲信道(Buf...
2018-03-19 14:02:07 492
原创 22.信道(channel)
原文:https://golangbot.com/channels/欢迎来到Golang 系列教程的第 22 章。 在上一教程里,我们探讨了如何使用 Go 协程(Goroutine)来实现并发。我们接着在本教程里学习信道(Channel),学习如何通过信道来实现 Go 协程间的通信。 什么是信道?信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到另一端,通...
2018-03-19 14:01:26 1266
原创 21.go协程(Goroutine)
原文:https://golangbot.com/goroutines/欢迎来到Golang 系列教程的第 21 章。 在前面的教程里,我们探讨了并发,以及并发与并行的区别。本教程则会介绍在 Go 语言里,如何使用 Go 协程(Goroutine)来实现并发。Go 协程是什么?Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创...
2018-03-19 14:00:55 1330
原创 20.并发介绍
原文:https://golangbot.com/concurrency/欢迎来到我们Golang 系列教程的第 20 章。 Go 是并发式语言,而不是并行式语言。在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。 并发是什么?并发是指立即处理多个任务的能力。一个例子就能很好地说明这一点。 我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然...
2018-03-19 14:00:26 549
原创 19.接口(二)
原文:https://golangbot.com/interfaces-part-2/欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。实现接口:指针接受者与值接受者在上一章的教程”接口(一)”中,所有示例里面,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实...
2018-03-19 13:59:54 341
原创 18.接口(一)
原文:https://golangbot.com/interfaces-part-1/欢迎来到Golang 系列教程第 18 章。接口共有两个教程,这是我们接口的第一个教程。 什么是接口?在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。 在 Go 语言中,接口就是方法签名(Me...
2018-03-19 13:58:24 333
原创 17.方法
原文:https://golangbot.com/methods/欢迎来到 Golang 系列教程的第 17 章。什么是方法?方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。下面就是创建一个方法的语法。func (t Type) methodName(para...
2018-03-19 13:57:20 1188
原创 16.结构体
原文:https://golangbot.com/structs/欢迎来到Golang 系列教程的第 16 章。什么是结构体?结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。例如,一个职员有 firstName、lastName 和 age 三个属性,而把这些属性组合在一个结构体 empl...
2018-03-14 10:06:16 1282
原创 15.指针
原文:https://golangbot.com/pointers/欢迎来到Golang 系列教程的第 15 章。什么是指针?指针是一种存储变量内存地址(Memory Address)的变量。如上图所示,变量 b 的值为 156,而 b 的内存地址为 0x1040a124。变量 a 存储了 b 的地址。我们就称 a 指向了 b。指针的声明指针变量的类型为 *T,...
2018-03-14 10:05:45 1129
原创 14.字符串
原文: https://golangbot.com/strings/欢迎阅读Golang 系列教程的第 14 章。由于和其他语言相比,字符串在 Go 语言中有着自己特殊的实现,因此在这里需要被特别提出来。什么是字符串?Go 语言中的字符串是一个字节切片。把内容放在双引号”“之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串的简单示例。package main...
2018-03-14 10:05:11 1000
原创 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 346
原创 12.变参函数
原文:https://golangbot.com/variadic-functions/欢迎来到Golang 系列教程的第12章。什么是变参函数可变参数函数是一种参数个数可变的函数。语法如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最后一个参数。请注意只有函数的最后一个参数才允许是可变的。通过一些例子理解可变参数函数如何工作...
2018-03-14 10:03:56 344
数字逻辑课程设计《数字钟的设计》报告和电路图
2010-01-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人