GO
只会打野怪我咯
这个作者很懒,什么都没留下…
展开
-
golang fmt包Printf函数测试实例
package mainimport ( "fmt")//整数func intPrintf() { var a int = 162 fmt.Println("----------") fmt.Println("整数类型") // %b 表示为二进制 fmt.Printf("表示为二进制%b...原创 2019-04-15 22:44:52 · 911 阅读 · 0 评论 -
golang 从零实现一个redis客户端(三) 实现set命令
回顾 上一节我们构建了一个redis连接池,最终通过如下的方式发送命令func main() { client := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) client.SendCommand("SET hello world") 发送命令的方式是通过Sen...原创 2019-05-19 17:47:34 · 5258 阅读 · 0 评论 -
golang bufio包Reader类型方法测试例子
创建一个bufio.Reader类型的方法func NewReader(rd io.Reader) *ReaderRead声明func (b *Reader) Read(p []byte) (n int, err error)作用Read读取数据写入p。本方法返回写入p的字节数。本方法一次调用最多会调用下层Reader接口一次Read方法,因此返回值n可能小于len(p...原创 2019-05-20 14:29:31 · 5059 阅读 · 0 评论 -
golang errors包
包作用实现了创建error类型错误值的函数error类型的实现实际上error类型是一个底层接口,type error interface { Error() string}需要注意是,fmt包中涉及格式输出的,在输出一个error类型值的内容的时候,就是调用Error()方法,输出Error方法的返回值创建error错误值的方式一种是通过errors包的N...原创 2019-05-07 20:41:06 · 386 阅读 · 0 评论 -
golang 从零实现一个redis客户端(一)最简单的redis客户端
目的通过搭建一个高可用的redis客户端来学习redis,go语言,以及go一些设计模式参考资料go-redis源码redis-3.0源码《redis设计与实现》学习思路循环渐进,从最简单的一步步迭代一个最简单的能跑通的redis客户端例子package mainimport ( "fmt" "net" ...原创 2019-05-07 21:59:43 · 1784 阅读 · 0 评论 -
golang channel造成死锁(all goroutines are asleep - deadlock!)的几种错误写法
造成死锁的原因当Go协程给一个信道发送数据时,正常来说会有其他Go协程来接受数据,如果没有的话,程序就会在运行时触发panic,形成死锁,同理,当又Go协程等着从一个信道接受数据时,我们期望其他的Go协程会向该信道写入数据,要不然程序就会触发panic 在未初始化的信道上发送或者接受数据造成死锁的错误例子读写不完整在主线程会造成触发panic,在协程内会造成永久堵塞 ...原创 2019-05-15 14:13:57 · 2592 阅读 · 0 评论 -
golang select的用法实例
select语法的作用用来监听和channel有关的IO操作,语法与switch类似,不同的是,这里的每个case语句都是和channel相关的操作注意的地方select语句没有default情况下会一直阻塞,直到有发送或者接受操作准备就绪 select语句可以增加阻塞超时操作 如果有多个channel操作准备就绪,selelct会随机地选取一个执行 break语法可以提前终止一...原创 2019-05-15 15:25:50 · 595 阅读 · 0 评论 -
golang 使用time包的Timer类型设置定时事件
作用Timer类型代表单次时间事件。当Timer到期时,当时的时间会被发送给C信道一个简单实现定时事件的例子func main(){ t1 := time.NewTimer( 2 * time.Second) t2 := time.NewTimer( 3 * time.Second) startTime := time.Now() isTimeOut := false...原创 2019-05-15 21:23:03 · 1632 阅读 · 0 评论 -
golang 从零开始实现一个redis客户端(二)构建连接池
回顾 上一篇博客我们构建了一个简单的同步执行的能发送命令到redis服务器的例子,这次我们尝试构建一个连接池,可以让GO并发执行redis命令最终的目录结构其中 redis.go是供外部调用的主文件,options.go是可配置的相关参数,internal/pool下是跟连接池相关的最终想要实现成的结果package mainimport ( "github....原创 2019-05-16 23:36:08 · 1084 阅读 · 0 评论 -
golang base64解码碰到的坑
背景 在一次调用三方API的时候,为了数据安全和三方API的请求和返回信息都用了rsa加密,由于rsa算法生成的内容是二进制的,所以需要用base64编码将二进制数据转化成64个可打印字符进行通信或者存储。在获取到三方的base64编码的返回信息后,解码碰到了各种问题,如下是日志里打印的三方的一个base64编码后的字符串Cf1WA2nBMo3H9G2UPhlLBBVBsMDl4...原创 2019-06-06 10:14:17 · 27003 阅读 · 9 评论 -
golang 从零实现一个中间件(middleware)
实现中间件的背景先看如下代码package mainfunc hello(wr http.ResponseWriter, r *http.Request) { wr.Write([]byte("hello"))}func main() { http.HandleFunc("/", hello) err := http.ListenAndServe(":8...原创 2019-06-10 21:57:23 · 6064 阅读 · 0 评论 -
golang path包Match方法作用及实例
函数声明func Match(pattern, name string) (matched bool, err error)函数作用如果name匹配shell文件名模式匹配字符串,Match函数返回真(注意:Match要求匹配整个name字符串,不是它的一部分。如果pattern语法错误时,会返回"syntax error in pattern"的错误)可用的匹配字符如下:...原创 2019-04-29 17:26:41 · 4471 阅读 · 0 评论 -
golang strings包(二)
func ContainsAny(s, chars string) bool判断字符串s是否包含字符串chars中的任一字符。(通过例子可以看到空字符不属于任何字符串)fmt.Println(strings.ContainsAny("team", "i")) //falsefmt.Println(strings.ContainsAny("failure", "u &...原创 2019-04-18 22:36:21 · 136 阅读 · 0 评论 -
golang fmt包 Print、Println函数实例
package mainimport ( "fmt")/*func Print(a ...interface{}) (n int, err error)Print采用默认格式将其参数格式化并写入标准输出。如果两个相邻的参数都不是字符串,会在它们的输出之间添加空格。返回写入的字节数和遇到的任何错误。func Println(a ...interface{})与P...原创 2019-04-15 22:46:32 · 5707 阅读 · 0 评论 -
golang strings包NewReplacer方法
相关方法的声明func NewReplacer(oldnew ...string) *Replacerfunc (r *Replacer) Replace(s string) stringfunc (r *Replacer) WriteString(w io.Writer, s string) (n int, err error)方法的作用NewReplacer()使用提供...原创 2019-04-21 17:21:29 · 4341 阅读 · 0 评论 -
golang strings包NewReader方法
函数作用NewReader创建一个从s读取数据的Readertype Reader struct { s string //对应的字符串 i int64 // 当前读取到的位置 prevRune int }Len,Size,Read方法Len作用: 返回未读的字符串长度Size的作用:返回字符串的长度read的作用: 读取字符串信...原创 2019-04-21 19:16:29 · 21707 阅读 · 0 评论 -
golang fmt包GoStringer接口测试实例
GoStringer接口的结构声明如下:type GoStringer interface { GoString() string}作用:实现了GoStringer接口的类型(即有GoString方法),定义了该类型值的go语法表示。当采用verb %#v格式化一个操作数时,会调用GoString方法来生成输出的文本。package mainimpo...原创 2019-04-16 23:38:38 · 451 阅读 · 0 评论 -
golang fmt包Stringer接口测试实例
Stringer接口结构如下:type Stringer interface { String() string}作用:实现了Stringer接口的类型(即有String方法),定义了该类型值的原始显示。当采用任何接受字符的verb(%v %s %q %x %X)动作格式化一个操作数时,或者被不使用格式字符串如Print函数打印操作数时,会调用String方法来生成输出的文...原创 2019-04-17 10:41:55 · 562 阅读 · 0 评论 -
golang fmt包中*printf函数显式指定参数索引
在Printf、Sprintf、Fprintf三个函数中,默认的行为是对每一个格式化verb依次对应调用成功传递进来的参数。如果需要显式指定格式化那个参数,可以在格式化verb前增加[n] (n表示第n个参数,索引是从1开始) 例如( %[2]d )如果需要指定浮点数的宽度和精度可以写成[n]*的格式,例如([n]*f)需要注意的是 在处理完方括号表达式[n]后,默认 后面的格式化v...原创 2019-04-17 11:32:20 · 697 阅读 · 0 评论 -
golang fmt包格式化verb错误处理
使用*printf函数的过程中,难免会有一些使用不当导致的错误,大致有如下类型:1.错误的类型 例如:fmt.Printf("%d\n","string")2.使用了未知的verb 例如:fmt.Printf("%z\n","string")3.太多参数 例如::fmt.Printf("hello","world")4.太少参数 例如:fmt.Printf("hello %s\n...原创 2019-04-17 12:41:02 · 2985 阅读 · 0 评论 -
golang strings包(一)
func EqualFold(s, t string) bool判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。 fmt.Println(strings.EqualFold("Go", "go")) // true fmt.Println(strings.EqualFold("go", "go")) // tr...原创 2019-04-17 23:54:01 · 303 阅读 · 0 评论 -
golang sort包Search方法实例
函数声明func Search(n int, f func(int) bool) int函数作用Search函数采用二分法搜索找到[0, n)区间内最小的满足f(i)==true的值i。实现逻辑是,Search函数希望f在输入位于区间[0, n)的前面某部分(可以为空)时返回假,而在输入位于剩余至结尾的部分(可以为空)时返回真;Search函数会返回满足f(i)==true的最小值i...原创 2019-04-23 10:43:40 · 7678 阅读 · 4 评论 -
golang fmt包scan相关函数
fmt包中跟scan相关的函数总共有9个,最基础的Fscanf函数Fscanf函数的声明是func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error)作用:Fscanf从r(即实现io.Reader接口的类型)扫描文本,根据format参数指定的格式将成功读取的空白分隔的值保存进成功传递给...原创 2019-04-18 19:46:36 · 1597 阅读 · 0 评论 -
golang 实现arrayColumn 将结构数组中结构内的某个字段作为map的key
func arrayColumn(array interface{},key string)(result map[string]interface{},err error){ result = make(map[string]interface{}) t := reflect.TypeOf(array) v := reflect.ValueOf(array) if t.Kind() !...原创 2019-07-06 16:34:18 · 3645 阅读 · 0 评论