Go基础系列:channel入门

channel基础 channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel_A中放数据,另一个goroutine_B从channel_A取数据 。 channel是指针类型的数据类型,通过make来分配内存。例如: 这表示 ... »

python包导入细节

包导入格式 导入模块时除了使用模块名进行导入,还可以使用目录名进行导入。例如,在sys.path路径下,有一个dir1/dir2/mod.py模块,那么在任意位置处都可以使用下面这种方式导入这个模块。 一个实际一点的示例,设置PYTHONPATH环境变量为 ,然后在此目录下创建以上目录和mod.py ... »

python模块导入细节

python模块导入细节 官方手册:https://docs.python.org/3/tutorial/modules.html 可执行文件和模块 python源代码文件按照功能可以分为两种类型: 1. 用于执行的可执行程序文件 2. 不用与执行,仅用于被其它python源码文件导入的模块文件 例 ... »

Go基础系列:读取标准输入

fmt包中提供了3类读取输入的函数: Scan家族:从标准输入os.Stdin中读取数据,包括Scan()、Scanf()、Scanln() SScan家族:从字符串中读取数据,包括Sscan()、Sscanf()、Sscanln() Fscan家族:从io.Reader中读取数据,包括Fscan( ... »

Go基础系列:Go接口

接口用法简介 接口(interface)是一种类型,用来定义行为(方法)。 但这些行为不会在接口上直接实现,而是需要用户自定义的方法来实现。所以,在上面的Namer接口类型中的方法 都是没有实际方法体的,仅仅只是在接口Namer中存放这些方法的签名( )。 当用户自定义的类型实现了接口上定义的这些方 ... »

python函数的参数细节

按"指针"传递 python中 变量赋值、参数传递都是通过"指针"拷贝的方式进行的 。除了按"指针"拷贝,还有一种按值拷贝的方式,关于按值、按指针拷贝的细节,参见 "按值传递 vs. 按指针传递" 。 所以在python中,变量赋值、参数传递,都只是拷贝了源数据的一个地址,而不会拷贝内存中完整的数据 ... »

Python函数基础

函数声明、调用、返回基础 Python中使用def关键字来声明函数,声明函数的格式为: 有3个需要注意的地方: 1. 函数名后面必须加冒号 2. 如果函数体和def不在同一行,则必须缩进 3. return指定函数返回值,用来结束函数 但return语句是可有可无的,如果不给return,则等价于加 ... »

按值传递 vs. 按指针传递

按值传递还是指针传递? 变量赋值有两种方式:按值传递、按"指针"传递(指针也常称为"引用")。不同的编程语言赋值的方式不一样,例如Python是按"指针"传递的,Go是按值传递的。 注意,"指针"加了引号,因为它不是真正的按指针拷贝,见下文分析。 参数传值其实也是变量赋值的过程,只不过参数是函数的本 ... »

Python作用域详述

作用域是指变量的生效范围,例如本地变量、全局变量描述的就是不同的生效范围。 python的变量作用域的规则非常简单,可以说是所有语言中最直观、最容易理解的作用域。 在开始介绍作用域之前,先抛一个问题: 上面的代码将输出3、1、1。解释参见 "再述作用域规则" python作用域规则简介 它有4个层次 ... »

Go基础系列:Go接口

接口用法简介 接口(interface)是一种类型,用来定义行为(方法)。 但这些行为不会在接口上直接实现,而是需要用户自定义的方法来实现。所以,在上面的Namer接口类型中的方法 都是没有实际方法体的,仅仅只是在接口Namer中存放这些方法的签名( )。 当用户自定义的类型实现了接口上定义的这些方 ... »

Go基础系列:Go中的方法

Go方法简介 Go中的struct结构类似于面向对象中的类。面向对象中,除了成员变量还有方法。 Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联、绑定),被称为struct的receiver。 它的定义方式大致如下: 这表示 函数是绑定在mytype这个struct t ... »

Go基础系列:struct的导出和暴露问题

struct的导出和暴露问题 关于struct的导出 struct的属性是否被导出,也遵循大小写的原则:首字母大写的被导出,首字母小写的不被导出。 所以: 1. 如果struct名称首字母是小写的,这个struct不会被导出。连同它里面的字段也不会导出,即使有首字母大写的字段名 。 2. 如果str ... »

Go基础系列:struct和嵌套struct

struct struct定义结构,结构由字段(field)组成,每个field都有所属数据类型,在一个struct中,每个字段名都必须唯一。 说白了就是拿来存储数据的,只不过可自定义化的程度很高,用法很灵活,Go中不少功能依赖于结构,就这样一个角色。 Go中不支持面向对象,面向对象中描述事物的类的 ... »

Go基础系列:函数(2)——回调函数和闭包

回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 1. 函数可以作为另一个函数的参数(典型用法是回调函数) 2. 函数可以返回另一个函数,即让另一个函数作为这个函数的返回值(典型用法是闭包) 一般来说,附带的还具备一个特性:函数可以作为 ... »

Go基础系列:函数(1)

Go中函数特性简介 对Go中的函数特性做一个总结。懂则看,不懂则算。 1. Go中有3种函数:普通函数、匿名函数(没有名称的函数)、方法(定义在struct上的函数)。 2. Go编译时不在乎函数的定义位置,但建议init()定义在最前面(如果有的话),main函数定义在init()之后,然后再根据 ... »

Go基础系列:数据类型转换(strconv包)

Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。 简单的转换操作 转换数据类型的方式很简单。 例如: Go允许在底层结构相同的两个类型之间互转。例如: 但注意: 1. 不是所有数据类型都能转换的,例如字母格式的string类型"abcd"转换为int肯定会失败 2. 低精度转换为高精度时是 ... »

Go基础系列(7):map类型

Go里的map用于存放key/value对,在其它地方常称为hash、dictionary、关联数组,这几种称呼都是对同一种数据结构的不同称呼,它们都用于将key经过hash函数处理,然后映射到value,实现一一对应的关系。 map的内部结构 一个简单的map结构示意图: 在向map中存储元素的时 ... »

Go基础系列(6):细说slice结构

slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值。在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列表),为操作数据结构带来非常大的便利性,如python、perl等都支持对数组的slice操作,甚至perl还支持对h ... »

go基础系列(5):数组

了解Python、Perl、JavaScript的人想必都知道它们的数组是动态的,可以虽需求自动增大数组长度。但Go中的数组是固定长度的,数组一经声明,就无法扩大、缩减数组的长度。但Go中也有类似的动态"数组",称为slice数据结构,在下一篇文章会详细解释它。 Go中的数组是slice和map两种 ... »

Go基础系列(3):导入包和初始化阶段

import导入包 搜索路径 import用于导入包: 编译器会根据上面指定的相对路径去搜索包然后导入,这个相对路径是从GOROOT或GOPATH(workspace)下的src下开始搜索的。 假如go的安装目录为 ,也就是说 ,而GOPATH环境变量 ,那么要搜索 包的时候,将按照 如下顺序 进行 ... »