GO语言测试实例
用测试实例,学习GO语言和标准库函数
只会打野怪我咯
这个作者很懒,什么都没留下…
展开
-
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 · 6023 阅读 · 0 评论 -
golang base64解码碰到的坑
背景 在一次调用三方API的时候,为了数据安全和三方API的请求和返回信息都用了rsa加密,由于rsa算法生成的内容是二进制的,所以需要用base64编码将二进制数据转化成64个可打印字符进行通信或者存储。在获取到三方的base64编码的返回信息后,解码碰到了各种问题,如下是日志里打印的三方的一个base64编码后的字符串Cf1WA2nBMo3H9G2UPhlLBBVBsMDl4...原创 2019-06-06 10:14:17 · 26790 阅读 · 9 评论 -
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 · 5046 阅读 · 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 · 1602 阅读 · 0 评论 -
golang select的用法实例
select语法的作用用来监听和channel有关的IO操作,语法与switch类似,不同的是,这里的每个case语句都是和channel相关的操作注意的地方select语句没有default情况下会一直阻塞,直到有发送或者接受操作准备就绪 select语句可以增加阻塞超时操作 如果有多个channel操作准备就绪,selelct会随机地选取一个执行 break语法可以提前终止一...原创 2019-05-15 15:25:50 · 581 阅读 · 0 评论 -
golang channel造成死锁(all goroutines are asleep - deadlock!)的几种错误写法
造成死锁的原因当Go协程给一个信道发送数据时,正常来说会有其他Go协程来接受数据,如果没有的话,程序就会在运行时触发panic,形成死锁,同理,当又Go协程等着从一个信道接受数据时,我们期望其他的Go协程会向该信道写入数据,要不然程序就会触发panic 在未初始化的信道上发送或者接受数据造成死锁的错误例子读写不完整在主线程会造成触发panic,在协程内会造成永久堵塞 ...原创 2019-05-15 14:13:57 · 2556 阅读 · 0 评论 -
golang errors包
包作用实现了创建error类型错误值的函数error类型的实现实际上error类型是一个底层接口,type error interface { Error() string}需要注意是,fmt包中涉及格式输出的,在输出一个error类型值的内容的时候,就是调用Error()方法,输出Error方法的返回值创建error错误值的方式一种是通过errors包的N...原创 2019-05-07 20:41:06 · 373 阅读 · 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 · 7639 阅读 · 4 评论 -
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 · 21578 阅读 · 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 · 4281 阅读 · 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 · 123 阅读 · 0 评论 -
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 · 1575 阅读 · 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 · 289 阅读 · 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 · 2895 阅读 · 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 · 676 阅读 · 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 · 546 阅读 · 0 评论 -
golang fmt包GoStringer接口测试实例
GoStringer接口的结构声明如下:type GoStringer interface { GoString() string}作用:实现了GoStringer接口的类型(即有GoString方法),定义了该类型值的go语法表示。当采用verb %#v格式化一个操作数时,会调用GoString方法来生成输出的文本。package mainimpo...原创 2019-04-16 23:38:38 · 436 阅读 · 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 · 5692 阅读 · 0 评论 -
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 · 886 阅读 · 0 评论