Ubuntu18.04中安装virtualenv和virtualenvwrapper

安装python3和pip3

sudo apt-get update
sudo apt install python3
sudo apt install python3-pip

安装virtualenv和virtualenvwrapper

pip3 install …

Go 语言基础之反射(十三)

一. 反射介绍

反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。

支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。

Go程序在运行期使用reflect包访问程序的反射信息。

在上一篇博客中我们介绍了空接口。 空接口可以存储任意类型的变量,那我们如何知道这个空接口保存的数据是什么呢? 反射就是在运行时动态的获取一个变量的类型信息和值信息。

二. 变量的内在机制

  • 变量包含类型信息和值信息 var arr …

Go 语言基础之接口(十二)

Go 语言接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。

一. 接口类型

在Go语言中接口(interface)是一种类型,一种抽象的类型。

interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。

为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型。

二. 为什么使用接口 …

Go 语言基础之包(十一)

在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。

一. 包介绍

包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmtosio等。

二. 包的定义

我们还可以根据自己的需要创建自己的包。一个包可以简单理解为一个存放.go …

Go 语言基础之结构体(十)

Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。

一. 类型别名和自定义类型

1. 自定义类型

在Go语言中有一些基本的数据类型,如string整型浮点型布尔等数据类型, Go语言中可以使用 …