骏马金龙 (新博客:www.junmajinlong.com)

网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录自己成长点滴!!!

随笔分类 -  Golang

摘要:RESTful架构的简介 web服务的架构模式主要有2种:SOAP和REST。SOAP和REST都回答了同一个问题:如何访问web服务。 SOAP风格的程序是功能驱动的,要借助xml来传递数据,明确表示要做什么动作,访问什么资源,但使用xml是非常繁琐复杂的事情。 RESTful风格的Web服务是资 阅读全文
posted @ 2018-12-07 13:51 骏马金龙 阅读(2738) 评论(0) 推荐(1) 编辑
摘要:json数据格式 参见 "json数据格式说明" 。 如果没操作过json数据,建议先看下上面的文章,有助于理解本文后面的内容。 Go json包 Marshal():Go数据对象 json数据 UnMarshal():Json数据 Go数据对象 构建json数据 Marshal()和Marshal 阅读全文
posted @ 2018-12-07 00:46 骏马金龙 阅读(14364) 评论(0) 推荐(3) 编辑
摘要:序列化持久存储gob "1.内存存储" "2.CSV文件存储" "3.gob序列化存储" 本篇文章仍然接前面的文章: "内存存储" ,主要介绍将博客文章数据序列化持久到文件中。 encoding/gob包用于编码器和解码器之间进行二进制流的数据交换,例如发送端和接收端之间交换数据。也能用来实现对象序 阅读全文
posted @ 2018-12-03 19:01 骏马金龙 阅读(1415) 评论(0) 推荐(0) 编辑
摘要:存储到CSV文件中 "1.内存存储" "2.CSV文件存储" "3.gob序列化存储" 本文接上一篇: "内存存储" 。 关于CSV文件的说明,见 "csv文件格式" 当数据存储到了内存中,可以在需要的时候持久化保存到磁盘文件中。比如保存为csv格式的文件,下一篇再介绍序列化持久到文件中。 下面是持 阅读全文
posted @ 2018-12-03 19:00 骏马金龙 阅读(1569) 评论(0) 推荐(1) 编辑
摘要:数据可以存储在内存中、文件中、按二进制序列化存储的文件中、数据库中等。 "1.内存存储" "2.CSV文件存储" "3.gob序列化存储" 内存存储 将数据存储到内存中。此处所指的内存是指应用程序自身的内存空间(如slice、array、map、struct、队列、树等等容器),而不是外部的内存数据 阅读全文
posted @ 2018-12-02 16:50 骏马金龙 阅读(1840) 评论(0) 推荐(0) 编辑
摘要:本文只介绍template的语法和用法,关于template包的函数、方法、template的结构和原理,见: "深入剖析Go template" 。 入门示例 以下为test.html文件的内容,里面使用了一个template语法 。 以下是test.html同目录下的一个go web程序: 前面 阅读全文
posted @ 2018-12-02 13:48 骏马金龙 阅读(92960) 评论(5) 推荐(12) 编辑
摘要:处理请求 Request和Response http Requset和Response的内容包括以下几项: 1. Request or response line 2. Zero or more headers 3. An empty line, followed by … 4. … an opti 阅读全文
posted @ 2018-11-28 23:45 骏马金龙 阅读(4641) 评论(1) 推荐(1) 编辑
摘要:Cookie用来解决http协议无状态的问题。 首先,在服务端生成Cookie,然后在http响应header中设置Set Cookie字段,客户端会读取到Set Cookie字段后,会将cookie信息存储起来,下次继续访问服务端时,会在http请求中设置Cookie字段并发送给服务端,服务端可以 阅读全文
posted @ 2018-11-28 23:45 骏马金龙 阅读(2856) 评论(0) 推荐(0) 编辑
摘要:本文只关注Go text/template的底层结构,带上了很详细的图片以及示例帮助理解,有些地方也附带上了源码进行解释。有了本文的解释,对于Go template的语法以及html/template的用法,一切都很简单。 关于template的语法以及具体使用方法,见: "Go template用 阅读全文
posted @ 2018-11-28 23:35 骏马金龙 阅读(20190) 评论(3) 推荐(3) 编辑
摘要:ServeMux简介 ServeMux扮演的角色是Multiplexer,它用来将将请求根据url路由给已注册的handler。如下图: 上图中为3个路径注册了handler,一个是"/",另外两个是"/hello"和"/world"。这表示访问 时,multiplexer会调用上图中对应的第二个h 阅读全文
posted @ 2018-11-26 16:12 骏马金龙 阅读(3334) 评论(0) 推荐(0) 编辑
摘要:Multiplexer根据URL将请求路由给指定的Handler。 Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求对应的响应字段(respones header)写入ResponseWriter中,然后返回 。 什么是Handler 什么是Handler。它是一个接口,定 阅读全文
posted @ 2018-11-26 16:12 骏马金龙 阅读(5833) 评论(1) 推荐(4) 编辑
摘要:URL也是一个结构体: URL结构表示解析之后的URL,一般格式为: 由于path和query部分只能使用大小写字母、数字以及有限的几个特殊标点,其它所有的字符都需要进行URL编码:百分号+2位16进制数。例如,空格被编码为"%20",斜线被编码为"%2f",有时候query的value中空格会被编 阅读全文
posted @ 2018-11-26 16:09 骏马金龙 阅读(2428) 评论(0) 推荐(1) 编辑
摘要:HttpRouter是一个轻量级但却非常高效的multiplexer。手册: https://godoc.org/github.com/julienschmidt/httprouter https://github.com/julienschmidt/httprouter 用法示例 首先执行: 然后 阅读全文
posted @ 2018-11-26 16:08 骏马金龙 阅读(5358) 评论(0) 推荐(1) 编辑
摘要:惰性数值生成器是指在需要的时候才生成下一个数值,不需要的时候就卡在那。这和python的列表推导表达式类似。惰性生成器的好处是不会一次性将全部结果返回或放进内存,而是每次只返回一个,这样不会在某一时刻大量占用内存和其它资源。 比如,要生成10W个数值,如果要迭代这10W个数值,有两种方法。第一种方法 阅读全文
posted @ 2018-11-23 21:43 骏马金龙 阅读(1322) 评论(0) 推荐(0) 编辑
摘要:正常情况下,新激活的goroutine的结束过程是不可控制的,唯一可以保证终止goroutine的行为是main goroutine的终止。也就是说,我们并不知道哪个goroutine什么时候结束。 但很多情况下,我们正需要知道goroutine是否完成。这需要借助sync包的WaitGroup来实 阅读全文
posted @ 2018-11-22 23:45 骏马金龙 阅读(8592) 评论(0) 推荐(2) 编辑
摘要:worker pool简介 worker pool其实就是线程池thread pool。对于go来说,直接使用的是goroutine而非线程,不过这里仍然以线程来解释线程池。 在线程池模型中, 有2个队列一个池子:任务队列、已完成任务队列和线程池 。其中已完成任务队列可能存在也可能不存在,依据实际需 阅读全文
posted @ 2018-11-22 23:12 骏马金龙 阅读(8557) 评论(0) 推荐(3) 编辑
摘要:sync.Mutex Go中使用sync.Mutex类型实现mutex(排他锁、互斥锁)。在源代码的sync/mutex.go文件中,有如下定义: 这没有任何非凡的地方。 和mutex相关的所有事情都是通过sync.Mutex类型的两个方法sync.Lock()和sync.Unlock()函数来完成 阅读全文
posted @ 2018-11-21 23:58 骏马金龙 阅读(16237) 评论(1) 推荐(5) 编辑
摘要:Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" 当关闭一个channel时,会使得这个channel变得可读。通过这个特性,可以实现一个goroutine执 阅读全文
posted @ 2018-11-21 14:00 骏马金龙 阅读(4889) 评论(0) 推荐(0) 编辑
摘要:Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" After() 谁也无法保证某些情况下的select是否会永久阻塞。很多时候都需要设置一下select的超时 阅读全文
posted @ 2018-11-21 13:35 骏马金龙 阅读(11935) 评论(0) 推荐(2) 编辑
摘要:Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" 当未为channel分配内存时,channel就是nil channel,例如var ch1 chan in 阅读全文
posted @ 2018-11-21 13:33 骏马金龙 阅读(6255) 评论(1) 推荐(1) 编辑