三月沙


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 我的书单

  • 技术编年史

Go interface 详解 (三) :interface 的值

发表于 Oct 18 2017 | 分类于 Go 读书笔记

本系列是阅读 “The Go Programming Language” 理解和记录。

Interface value 的赋值

从概念上来讲,interface value 有两部分组成:type 部分是一个 concrete type,vlaue 部分是这个 concrete type 对应的 instance,它们分别称之为 interface value 的 dynamic type 和 dynamic value。

由于 Go 是静态类型的语言,type 是在编译阶段已经定义好的,而 interface 存储的值是动态的,在上面这个概念模型中,type 部分更准确叫法是 type descriptors,主要是提供 concrete type 的相关信息,包括 method、name 等。

下面这几个语句:

1
2
3
4
var w io.Writer
w = os.Stdout
w = new(bytes.Buffer)
w = nil

变量 w 依次存储了三种不同的值,在此我们依次来看看每种不同的值的确切含义。

阅读全文 »

算法—树

发表于 Oct 17 2017 | 分类于 算法
树结构是一种典型的非线性结构,非线性就意味着数据结构中至少拥有两个直接前驱或后继元素 概念树树是由 n(n>=0)个节点组成的有穷集合 D 与 D 上的关系集合 R 构成的集合,通常用 T 来表示,再此定义上,树满足以下三个条件 n=0 时,该节点集合为空,该树被称之为空树 在任意非空树中, ...
阅读全文 »

聊聊测试:入门和实践

发表于 Oct 14 2017 | 分类于 技术

在我个人职业生涯的前两年,我几乎没有写过几个正规的测试用例,大部分时候都是赶进度用人工测试,当然所在的团队规模也不是特别大,所有的测试都是 developer 自己完成。那个时候我对测试虽然稍有存疑,但还是抱着想试试的态度,当时摆在我面前的问题是:测什么和如何测。

随着日后经历的团队规模不断变大,开发的软件服务的复杂度和用户量的不断变高,对测试的理解也从不知如何想入手到持续推进自动化和 CI 在团队中不断普及和应用,甚至强行将测试覆盖率和测试质量纳为开发人员的考核指标,在此我们一起好好聊聊软件生命质量的保证:测试。

为什么很多 developer 不写测试,甚至厌恶写测试

不想测试的 developer 常常由自己的一套理由或者借口。

观点一:我的代码跑得很好,为什么要测试

对这样的观点最有力的回应是,你怎么知道你的代码跑得好好的,你测试过么,除非你现在测试一下你的代码证明它跑得很正确。但事实上自动化测试带来的好处绝对是显而易见的:

  • 可重复执行,有利于代码反复修改和迭代
  • 可随时发布,让你的代码第一时间接触用户
  • 节省时间
    ……

wecatch 开源的 app-turbo 在上线到生产环境第一个版本之后(彼时测试覆盖率不足20%),每迭代一个小版本大概需要一周时间,当测试覆盖率达到 30% 已经可以 3 天发一个小版本,现在 50% 的覆盖率如果不是大功能变动,一天发可以一个版本。

阅读全文 »

Go interface 详解(二) :定义和使用

发表于 Oct 12 2017 | 分类于 Go 读书笔记

本系列是阅读 “The Go Programming Language” 理解和记录。

定义 interface

正如上文所说,Go interface 是一种类型,一个 interface type 指定了一组 method 集合,如果说一个 concrete type 是一个 interface 的 instance,我们说这个 concrete type 实现了这个 interface 的所有方法。

在 Go 的标准库 io package 中定义了很多有用的 interface:

1
2
3
4
5
6
7
8
9
10
11
12
13
package io

type Reader interface {
Read(p []byte)(n intm err error)
}

type Writer interface {
Write(p []byte) (n int, err error)
}

type Closer interface {
Close() error
}

阅读全文 »

Go interface 详解(一) :介绍

发表于 Oct 10 2017 | 分类于 Go 读书笔记

本系列是阅读 “The Go Programming Language” 理解和记录。

Go 中的 interface 是一种类型,更准确的说是一种抽象类型 abstract type,一个 interface 就是包含了一系列行为的 method 集合,interface 的定义很简单:

1
2
3
4
5
package io

type Writer interface {
Write(p []byte) (n int, err error)
}

Go 中的 interface 不同于其它语言,它是隐式的 implicitly,这意味着对于一个已有类型,你可以不用更改任何代码就可以让其满足某个 interface。

如果一个 concrete type 实现了某个 interface,我们说这个 concrete type 实现了 interface 包含的所有 method,必须是所有的 method。

在 Go 的标准库 fmt 中有一系列的方法可以很好的诠释 interface 是如何应用到实践当中的。

阅读全文 »

使用 pipenv 和 autoenv 构造一键 Python Project 环境

发表于 Oct 10 2017 | 分类于 python

虽然 Python 的 virtualenv 可以为 Python 的工程提供很好的环境支持免去了很多环境依赖上的麻烦,但是若是项目太多,还是要构建很多虚拟环境,而且每次进不同的项目都需要手动切换非常麻烦,autoenv 和 pipenv可以为 Python 的工程提供 virtualenv 自动构建、自动激活以及灵活的依赖管理。

阅读全文 »

我的学习方法论

发表于 Oct 9 2017 | 分类于 方法论
学习的第1步:认识学习的目的、本质和底层规律知识的真正作用以及发展历程知识发展共经历了三个阶段: 第一阶段,知识数量构建认识优势第二阶段,知识获取速度构建认知优势第三阶段,知识深度构建认知优势(现在的阶段) 这三个阶段的发展反应了知识管理的核心是通过管理知识提升认知深度,进而改变自己的行为模式。不难 ...
阅读全文 »

使用 Python bumpversion 轻松实现版本管理

发表于 Sep 29 2017 | 分类于 python
bumpversion 是用来实现 Python package 的包管理工具,它利用 setup.cfg 文件进行文件内的版本信息查找和替换,pypi。 小版本 bump minor1bumpversion --current-version 0.5.1 minor version 从 0.5.1 ...
阅读全文 »

说说 MD5

发表于 Sep 19 2017 | 分类于 技术
什么是 MD5MD5 全称是 Message-Digest Algorithm,是一种密码散列函数,可产生一种128位(16字节)的散列值(hash value),MD5 常用于校验数据的完整性以及生成唯一的数据摘要信息。 由于 MD5 被证明无法防止碰撞,也就是会出现两个不一样的数据采用 MD5 ...
阅读全文 »

深入理解 Python package

发表于 Sep 14 2017 | 分类于 python

Python 是通过 module 组织代码的,module 即一个 py 文件,module 又是通过 package 来组织的,package 是一个包含 __init__.py 的文件夹,代码,module,package 它们三者的关系就是:module 包含代码,package 至少包含一个为 __init__.py 的 module。

1
2
3
4
5
package
├── __init__.py
├── submodule.py
└── subpackage
└── __init__.py

Python 的 package 以及 package 中的 __init__.py 共同决定了 package 中的 module 是如何被外界访问的。

阅读全文 »
1…91011…14
三月沙

三月沙

135 日志
28 分类
113 标签
GitHub
© 2024 三月沙
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.2