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

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

上一页 1 2 3 4 5 6 7 8 ··· 15 下一页
摘要: 动态类型的语言 python是动态类型的语言,不需要声明变量的类型。 实际上,python中的变量仅仅只是用来保存一个数据对象的地址。无论是什么数据对象,在内存中创建好数据对象之后,都只是把它的地址保存到变量名中。所以变量名是类型无关的,但它指向的值是类型相关的,可以是数值、字符串、列表、函数、类、 阅读全文
posted @ 2018-12-15 12:22 骏马金龙 阅读(7306) 评论(0) 推荐(3) 编辑
摘要: 在shell脚本中,常用if来判断程序的某个部分是否可能会出错,并在if的分支中做出对应的处理,从而让程序更具健壮性。if判断是异常处理的一种方式,所有语言都通用。对于特性完整的编程语言来说,都有专门的异常处理机制,有些语言用起来可能会很复杂,要求一堆堆的,有些语言则非常简洁,用起来非常通畅。 入门 阅读全文
posted @ 2018-12-13 22:35 骏马金龙 阅读(4073) 评论(0) 推荐(1) 编辑
摘要: with/as 使用open打开过文件的对with/as都已经非常熟悉,其实with/as是对try/finally的一种替代方案。 当某个对象支持一种称为"环境管理协议"的协议时,就会通过环境管理器来自动执行某些善后清理工作,就像finally一样:不管中途是否发生异常,最终都会执行某些清理操作。 阅读全文
posted @ 2018-12-12 21:25 骏马金龙 阅读(2747) 评论(0) 推荐(3) 编辑
摘要: 在前面,我用了3篇文章解释python的面向对象: 1. "面向对象:从代码复用开始" 2. "面向对象:设置对象属性" 3. "类和对象的名称空间" 本篇是第4篇,用一个完整的示例来解释面向对象的一些细节。 例子的模型是父类Employe和子类Manager,从类的定义开始,一步步完善直到类变得完 阅读全文
posted @ 2018-12-10 22:48 骏马金龙 阅读(1573) 评论(1) 推荐(5) 编辑
摘要: 代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 函数内部可嵌套函数,嵌套函数有更内一层的名称空间 类代码块, 名称空间为类自身 类中可定义函数,类 阅读全文
posted @ 2018-12-09 23:13 骏马金龙 阅读(2647) 评论(0) 推荐(4) 编辑
摘要: 函数多个返回值 python的函数支持返回多个值。 返回多个值时,默认以tuple的方式返回 。 例如,下面两个函数的定义是完全等价的。 如果将函数调用的返回值赋值给对应个数的变量,它会一一对应的赋值,这很容易理解。下面是等价的: 如果赋值给一个变量,将会把整个元组赋值给变量。下面是等价的,a表示整 阅读全文
posted @ 2018-12-09 16:36 骏马金龙 阅读(3947) 评论(0) 推荐(3) 编辑
摘要: 用类存储数据 类实际上就是一个数据结构,对于python而言,它是一个类似于字典的结构。当根据类创建了对象之后,这个对象就有了一个数据结构,包含一些赋值了的属性。在这一点上,它和其它语言的struct的作用是类似的: 存储数据并提供数据检索功能 。 例如,下面是史上最简单的类: pass关键字表示这 阅读全文
posted @ 2018-12-09 14:46 骏马金龙 阅读(10160) 评论(0) 推荐(4) 编辑
摘要: 只要是有属性的数据对象(不一定是面向对象的对象实例,而是指具有数据类型的数据对象),都可以通过 和dir()来显示数据对象的相关属性。 可以看作是数据对象的名称空间,所以只包含自己的属性,且可以直接增、删、改、查 。 dir()可以看作是显示属性的包含显示,除了显示自己的还显示继承来的属性。 对于模 阅读全文
posted @ 2018-12-08 14:54 骏马金龙 阅读(1842) 评论(0) 推荐(2) 编辑
摘要: RESTful架构的简介 web服务的架构模式主要有2种:SOAP和REST。SOAP和REST都回答了同一个问题:如何访问web服务。 SOAP风格的程序是功能驱动的,要借助xml来传递数据,明确表示要做什么动作,访问什么资源,但使用xml是非常繁琐复杂的事情。 RESTful风格的Web服务是资 阅读全文
posted @ 2018-12-07 13:51 骏马金龙 阅读(2710) 评论(0) 推荐(1) 编辑
摘要: json数据格式 参见 "json数据格式说明" 。 如果没操作过json数据,建议先看下上面的文章,有助于理解本文后面的内容。 Go json包 Marshal():Go数据对象 json数据 UnMarshal():Json数据 Go数据对象 构建json数据 Marshal()和Marshal 阅读全文
posted @ 2018-12-07 00:46 骏马金龙 阅读(13986) 评论(0) 推荐(3) 编辑
摘要: 格式说明 1. json文件由对象(集合)、数组、key/value元素组成,可以相互嵌套。 2. 使用大括号包围的是对象,使用中括号包围的是数组,冒号分隔的是元素。 3. 元素的key只能是字符串。 4. 元素的value数据类型可以是: number:整数和浮点数都属于number类型,可以是正 阅读全文
posted @ 2018-12-06 17:37 骏马金龙 阅读(3958) 评论(0) 推荐(1) 编辑
摘要: 序列化持久存储gob "1.内存存储" "2.CSV文件存储" "3.gob序列化存储" 本篇文章仍然接前面的文章: "内存存储" ,主要介绍将博客文章数据序列化持久到文件中。 encoding/gob包用于编码器和解码器之间进行二进制流的数据交换,例如发送端和接收端之间交换数据。也能用来实现对象序 阅读全文
posted @ 2018-12-03 19:01 骏马金龙 阅读(1358) 评论(0) 推荐(0) 编辑
摘要: 存储到CSV文件中 "1.内存存储" "2.CSV文件存储" "3.gob序列化存储" 本文接上一篇: "内存存储" 。 关于CSV文件的说明,见 "csv文件格式" 当数据存储到了内存中,可以在需要的时候持久化保存到磁盘文件中。比如保存为csv格式的文件,下一篇再介绍序列化持久到文件中。 下面是持 阅读全文
posted @ 2018-12-03 19:00 骏马金龙 阅读(1523) 评论(0) 推荐(1) 编辑
摘要: csv文件应用很广泛,历史也很悠久。有很多种类型的csv格式,常用的是rfc 4180定义的格式。 csv文件包含一行或多行记录,每行记录中包含一个或多个字段。记录与记录之间使用换行符分隔,最后一个记录可以没有换行符。 空白不会分隔字段。例如下面有3个字段,第一个字段是"abc def"。 空行被忽 阅读全文
posted @ 2018-12-02 18:49 骏马金龙 阅读(3384) 评论(0) 推荐(0) 编辑
摘要: 数据可以存储在内存中、文件中、按二进制序列化存储的文件中、数据库中等。 "1.内存存储" "2.CSV文件存储" "3.gob序列化存储" 内存存储 将数据存储到内存中。此处所指的内存是指应用程序自身的内存空间(如slice、array、map、struct、队列、树等等容器),而不是外部的内存数据 阅读全文
posted @ 2018-12-02 16:50 骏马金龙 阅读(1807) 评论(0) 推荐(0) 编辑
摘要: 本文只介绍template的语法和用法,关于template包的函数、方法、template的结构和原理,见: "深入剖析Go template" 。 入门示例 以下为test.html文件的内容,里面使用了一个template语法 。 以下是test.html同目录下的一个go web程序: 前面 阅读全文
posted @ 2018-12-02 13:48 骏马金龙 阅读(89943) 评论(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 骏马金龙 阅读(4569) 评论(1) 推荐(1) 编辑
摘要: Cookie用来解决http协议无状态的问题。 首先,在服务端生成Cookie,然后在http响应header中设置Set Cookie字段,客户端会读取到Set Cookie字段后,会将cookie信息存储起来,下次继续访问服务端时,会在http请求中设置Cookie字段并发送给服务端,服务端可以 阅读全文
posted @ 2018-11-28 23:45 骏马金龙 阅读(2735) 评论(0) 推荐(0) 编辑
摘要: 本文只关注Go text/template的底层结构,带上了很详细的图片以及示例帮助理解,有些地方也附带上了源码进行解释。有了本文的解释,对于Go template的语法以及html/template的用法,一切都很简单。 关于template的语法以及具体使用方法,见: "Go template用 阅读全文
posted @ 2018-11-28 23:35 骏马金龙 阅读(19356) 评论(3) 推荐(2) 编辑
摘要: Form的enctype属性 一般都使用html的Form表单通过HTTP POST方法发送Request body。下面是一个form: 如果使用GET方法,input中的key/vaule会编码后放进URL的query部分发送出去。如果使用POST方法,input中的key/value会编码后放 阅读全文
posted @ 2018-11-26 18:09 骏马金龙 阅读(507) 评论(0) 推荐(0) 编辑
摘要: ServeMux简介 ServeMux扮演的角色是Multiplexer,它用来将将请求根据url路由给已注册的handler。如下图: 上图中为3个路径注册了handler,一个是"/",另外两个是"/hello"和"/world"。这表示访问 时,multiplexer会调用上图中对应的第二个h 阅读全文
posted @ 2018-11-26 16:12 骏马金龙 阅读(3271) 评论(0) 推荐(0) 编辑
摘要: Multiplexer根据URL将请求路由给指定的Handler。 Handler用于处理请求并给予响应。更严格地说,用来读取请求体、并将请求对应的响应字段(respones header)写入ResponseWriter中,然后返回 。 什么是Handler 什么是Handler。它是一个接口,定 阅读全文
posted @ 2018-11-26 16:12 骏马金龙 阅读(5678) 评论(1) 推荐(4) 编辑
摘要: URL也是一个结构体: URL结构表示解析之后的URL,一般格式为: 由于path和query部分只能使用大小写字母、数字以及有限的几个特殊标点,其它所有的字符都需要进行URL编码:百分号+2位16进制数。例如,空格被编码为"%20",斜线被编码为"%2f",有时候query的value中空格会被编 阅读全文
posted @ 2018-11-26 16:09 骏马金龙 阅读(2366) 评论(0) 推荐(1) 编辑
摘要: HttpRouter是一个轻量级但却非常高效的multiplexer。手册: https://godoc.org/github.com/julienschmidt/httprouter https://github.com/julienschmidt/httprouter 用法示例 首先执行: 然后 阅读全文
posted @ 2018-11-26 16:08 骏马金龙 阅读(5300) 评论(0) 推荐(1) 编辑
摘要: 惰性数值生成器是指在需要的时候才生成下一个数值,不需要的时候就卡在那。这和python的列表推导表达式类似。惰性生成器的好处是不会一次性将全部结果返回或放进内存,而是每次只返回一个,这样不会在某一时刻大量占用内存和其它资源。 比如,要生成10W个数值,如果要迭代这10W个数值,有两种方法。第一种方法 阅读全文
posted @ 2018-11-23 21:43 骏马金龙 阅读(1277) 评论(0) 推荐(0) 编辑
摘要: 正常情况下,新激活的goroutine的结束过程是不可控制的,唯一可以保证终止goroutine的行为是main goroutine的终止。也就是说,我们并不知道哪个goroutine什么时候结束。 但很多情况下,我们正需要知道goroutine是否完成。这需要借助sync包的WaitGroup来实 阅读全文
posted @ 2018-11-22 23:45 骏马金龙 阅读(8515) 评论(0) 推荐(2) 编辑
摘要: worker pool简介 worker pool其实就是线程池thread pool。对于go来说,直接使用的是goroutine而非线程,不过这里仍然以线程来解释线程池。 在线程池模型中, 有2个队列一个池子:任务队列、已完成任务队列和线程池 。其中已完成任务队列可能存在也可能不存在,依据实际需 阅读全文
posted @ 2018-11-22 23:12 骏马金龙 阅读(8220) 评论(0) 推荐(3) 编辑
摘要: sync.Mutex Go中使用sync.Mutex类型实现mutex(排他锁、互斥锁)。在源代码的sync/mutex.go文件中,有如下定义: 这没有任何非凡的地方。 和mutex相关的所有事情都是通过sync.Mutex类型的两个方法sync.Lock()和sync.Unlock()函数来完成 阅读全文
posted @ 2018-11-21 23:58 骏马金龙 阅读(15854) 评论(1) 推荐(5) 编辑
摘要: Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" 当关闭一个channel时,会使得这个channel变得可读。通过这个特性,可以实现一个goroutine执 阅读全文
posted @ 2018-11-21 14:00 骏马金龙 阅读(4808) 评论(0) 推荐(0) 编辑
摘要: Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" After() 谁也无法保证某些情况下的select是否会永久阻塞。很多时候都需要设置一下select的超时 阅读全文
posted @ 2018-11-21 13:35 骏马金龙 阅读(11527) 评论(0) 推荐(2) 编辑
摘要: Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" 当未为channel分配内存时,channel就是nil channel,例如var ch1 chan in 阅读全文
posted @ 2018-11-21 13:33 骏马金龙 阅读(6090) 评论(1) 推荐(1) 编辑
摘要: Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" 双层通道的解释见 "Go的双层通道" 以下是一个双层通道的使用示例。注意下面的示例中使用了"信号通道"(Si 阅读全文
posted @ 2018-11-21 13:32 骏马金龙 阅读(2850) 评论(0) 推荐(0) 编辑
摘要: shell脚本动画小工具 看gif图: shell脚本版 脚本内容如下: !/usr/bin/env bash Author:博客园——骏马金龙 shell scripts:http://www.cnblogs.com/f ck need u/p/7048359.html Usage:$0 "COM 阅读全文
posted @ 2018-11-20 09:23 骏马金龙 阅读(2156) 评论(0) 推荐(0) 编辑
摘要: Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" channel基础 channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样 阅读全文
posted @ 2018-11-19 22:50 骏马金龙 阅读(12024) 评论(3) 推荐(5) 编辑
摘要: 本文从代码复用的角度一步一步演示如何从python普通代码进化到面向对象,并通过代码去解释一些面向对象的理论。所以,本文前面的内容都是非面向对象的语法实现方式,只有在最结尾才给出了面向对象的简单语法介绍。各位道兄不妨一看,如果留下点笔墨指导,本人感激不尽。 最初代码 3种动物牛Cow、羊Sheep、 阅读全文
posted @ 2018-11-15 17:54 骏马金龙 阅读(3237) 评论(0) 推荐(6) 编辑
摘要: 包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入。例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块。 一个实际一点的示例,设置PYTHONPATH环境变量为 ,然后在此目录下创建以上目录和mod.py 阅读全文
posted @ 2018-11-15 01:29 骏马金龙 阅读(12827) 评论(0) 推荐(3) 编辑
摘要: python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 1. 用于执行的可执行程序文件 2. 不用与执行,仅用于被其它python源码文件导入的模块文件 例 阅读全文
posted @ 2018-11-13 23:10 骏马金龙 阅读(5047) 评论(3) 推荐(10) 编辑
摘要: fmt包中提供了3类读取输入的函数: Scan家族:从标准输入os.Stdin中读取数据,包括Scan()、Scanf()、Scanln() SScan家族:从字符串中读取数据,包括Sscan()、Sscanf()、Sscanln() Fscan家族:从io.Reader中读取数据,包括Fscan( 阅读全文
posted @ 2018-11-11 23:27 骏马金龙 阅读(17009) 评论(0) 推荐(4) 编辑
摘要: 空接口 空接口是指没有定义任何接口方法的接口。 没有定义任何接口方法,意味着Go中的任意对象都可以实现空接口(因为没方法需要实现),任意对象都可以保存到空接口实例变量中 。 空接口的定义方式: 通常会简写为 。 更常见的,会直接使用 作为一种类型,表示空接口。例如: 再比如函数使用空接口类型参数: 阅读全文
posted @ 2018-11-11 09:52 骏马金龙 阅读(5789) 评论(0) 推荐(4) 编辑
摘要: 接口用法简介 接口(interface)是一种类型,用来定义行为(方法)。 但这些行为不会在接口上直接实现,而是需要用户自定义的方法来实现。所以,在上面的Namer接口类型中的方法 都是没有实际方法体的,仅仅只是在接口Namer中存放这些方法的签名( )。 当用户自定义的类型实现了接口上定义的这些方 阅读全文
posted @ 2018-11-10 22:15 骏马金龙 阅读(4733) 评论(2) 推荐(3) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 15 下一页