
Go学习
luSpet
go、python后端开发
展开
-
用go实现简单的redis客户端
文章目录功能RESP协议连接层tcp连接封装读写操作协议层应用层SET方法GET方法写单测进行测试 功能 redis客户端的职责非常简单,就是将命令按照RESP协议序列化后发给redis-server,再将返回数据按照RESP协议解析 RESP协议 主要规定就以下五条 For Simple Strings the first byte of the reply is “+” For Errors the first byte of the reply is “-” For Integers the fir原创 2020-09-11 14:47:07 · 479 阅读 · 0 评论 -
go time包使用总结
文章目录初始化Time对象当前时间固定时间从字符串解析Time对象的方法转字符串日期比较日期加减转时间戳获取日期信息时区转换 初始化Time对象 当前时间 func Now() Time //返回当前时间 固定时间 func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time //用年、月、日、时、分、秒、纳秒、地区构造时间对象 从字符串解析 func Parse(layout, value str原创 2020-09-08 15:55:33 · 386 阅读 · 0 评论 -
golang反射还原结构体中的字段
假设有这样一个结构体 type S struct { a int64 B []string c float64 } a := S{1, []string{"abc", "cba"}, 3.14} 用反射可以轻松拿到每个字段的值 reflect.ValueOf(a).FieldByName("a") reflect.ValueOf(a).FieldByName("B") reflect.ValueOf(a).FieldByName("c") 但这样返回的类型是reflect.Value 如果想还原自原创 2020-07-30 18:17:24 · 513 阅读 · 0 评论 -
golang log包学习笔记
文章目录Logger设置Logger参数SetOutputSetPrefixSetFlags打印日志打印日志内容打印日志内容后退出程序(严重错误)打印日志内容后宕机 Logger 打印日志等操作的接收者是 *Logger type Logger struct { mu sync.Mutex // ensures atomic writes; protects the following fields prefix string // prefix on each line t原创 2020-07-23 17:23:49 · 373 阅读 · 0 评论 -
Go语言学习笔记——反射
文章目录获取类型信息获取种类定义获取指针指向对象类型获取获得结构体的字段信息获取值利用类型信息创建实例反射调用函数 反射是指在程序运行期间对程序本身进行访问和修改的能力 举例来说,一个函数接收了interface{}类型的变量,传入函数之前,这个变量肯定是在程序某处定义过的,虽然我们看这个函数无法得知传进来的具体是什么,但是程序自身在运行时,肯定知道这个变量的具体信息,而反射就是获取这些信息的操作 Go使用reflect包访问程序的反射信息 获取类型信息 func foo(x interface原创 2020-05-16 00:58:47 · 253 阅读 · 0 评论 -
Go语言学习笔记——包
文章目录包访问权限导入包使用自定义包名导入匿名包包内的init()方法 Go语言的源码复用建立在包基础之上 Go程序入口函数main()必须在main包中 包访问权限 Go中没有public、private之类的关键字 在包内定义的类型、函数、接口等,如果首字母大写,就是公共的,在其他包中可以访问;反正就只能在当前包中访问 导入包 import "fmt" import "reflect" 或者 import ( "fmt" "reflect" ) 导入包实际导入的是路径原创 2020-05-15 20:59:23 · 217 阅读 · 0 评论 -
Go语言学习笔记——并发
文章目录使用goroutine使用channel创建channel使用channel使用select监听多个通道同步竞态检测原子访问互斥锁读写互斥锁等待组 并发是操作系统的主要特点之一,通过调度任务来获取CPU时间片实现并发 Go在语言层面实现了并发,有一个任务调度器用于调度任务,goroutine就是其中用来调度的任务 在Go中使用go关键字来启动一个goroutine,goroutine间用channel通信 使用goroutine 在调用方法/函数前,加上go关键字,即可启动一个gor原创 2020-05-15 20:53:42 · 243 阅读 · 0 评论 -
Go语言学习笔记——函数
文章目录普通函数声明带变量名的返回值函数变量匿名函数定义时调用将匿名函数赋值给函数变量作为回调函数可变参数函数defer语句方法 Go支持普通函数、匿名函数和闭包 &ems;Go中的函数是一等公民,可以像其他类型一样使用,赋值、传递参数、接收方法等 普通函数声明 func 函数名(参数列表) (返回参数列表){ 函数体 } 一个包内,函数名称不能重名 func foo(a, b string) (string, bool) { return a + b, true } 同原创 2020-05-15 11:51:53 · 302 阅读 · 0 评论 -
Go语言学习笔记——接口
文章目录声明接口实现接口接口嵌套接口和类型转换接口断言空接口类型interface{}空接口与其他类型转换空接口比较类型分支参考资料 接口是一种提供给调用方和实现方遵守的协议约定,大家都按照统一的命名、参数表、返回值定义/使用实现了该接口的方法 Go的接口设计是非侵入式的,接口编写者无须知道接口被哪些类型实现;接口实现者只需知道实现的接口是什么样子,无须指明实现了哪一个接口。这种隐式的实现,解除了实现类与接口间的强耦合关系 声明接口 type Invoke interface { Call(i原创 2020-05-15 11:49:46 · 340 阅读 · 0 评论 -
Go语言学习笔记——函数闭包
定义 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中实现词法绑定的一种技术。闭包在实现上是一个结构体,它存储了一个函数(通常是其入口地址)和一个关联的环境(相当于一个符号查找表)。环境里是若干对符号和值的对应关系,它既要包括约束变量(该函数内部绑定的符号),也要包括自由变量(在函数外部定义但在函数内被引用),有些函数也可能没有自由变量。闭包跟函数最大的不同在于,当捕捉闭包的时候,它的原创 2020-05-14 16:18:12 · 262 阅读 · 0 评论 -
Go语言学习笔记——流程控制
文章目录分支if语句特殊写法switch语句循环for循环for range循环遍历切片、数组、字符串遍历map遍历通道跳转break labelcontinue labelgoto label参考资料 分支 if语句 一般用法与C语言类似,但是判断表达式不用加括号 var a int if a < 4 { a++ } else if a == 4 { a-- } else { a *= 2 } 特殊写法 在判断条件表达式前,可以加额外的语句 if b := a * 2;原创 2020-05-14 12:02:41 · 325 阅读 · 0 评论 -
Go语言学习笔记——容器
文章目录数组声明数组初始化数组遍历数组切片对已有数组切片声明切片复制切片添加和删除元素添加元素删除元素映射使用映射遍历映射删除映射表中的键值对清空映射线程安全的映射使用sync.Map读写删除操作遍历sync.Map列表初始化列表在列表中插入元素,删除元素遍历列表参考资料 数组 长度固定的连续内存区域 声明数组 var <标识符> [size]T 其中,size必须是一个在编译期能确定的值,不能在运行期间才能计算确定,如果为空则是一个切片 var a [2]int var b [4]fl原创 2020-05-14 09:27:33 · 298 阅读 · 0 评论 -
Go语言学习笔记——字符串
文章目录声明字符串计算字符串长度遍历字符串遍历字符串每个字节遍历每个Unicode字符字符串子串的操作搜索子串获取子串修改字符串连接字符串格式化参考资料 声明字符串 字符串是Go中的基本类型,声明时与其他基本类型一致 var s1 string = "hello" var s2 = "world" s3 := "abc" 计算字符串长度 使用Go内置函数len()计算长度,返回值为存储字符串所用的字节数 var s1 string = "hello" var s2 = "world" s3 :=原创 2020-05-14 09:26:17 · 221 阅读 · 0 评论 -
Go语言学习笔记——变量
文章目录变量声明变量标准格式一次声明多个变量初始化变量默认值声明时初始化标准格式省略类型短变量声明多个变量赋值匿名变量常量常量声明枚举类型别名与类型定义类型别名类型定义为非本地类型定义方法在结构体中使用别名参考资料 变量 声明变量 标准格式 var 变量名 变量类型 //整型变量 var a int //64位浮点数组变量 var b []float64 //参数为空,返回值是bool的函数变量 var c func() bool //结构体变量 var e struct { x int } 一原创 2020-05-14 09:25:05 · 277 阅读 · 0 评论