摘要: 并发 goroutine goroutine是Go并行设计的核心。goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然 阅读全文
posted @ 2018-11-09 20:04 S&L·chuck 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 反射(Reflection) 反射是利用reflect包实现的 反射可大大提高程序的灵活性,使得interface{}有更大的发挥余地 反射使用TypeOf和ValueOf函数从接口中获取目标对象信息 反射会将匿名字段作为独立字段(匿名字段本质) 想要利用反射修改对象状态,前提是interface. 阅读全文
posted @ 2018-11-09 20:02 S&L·chuck 阅读(283) 评论(0) 推荐(0) 编辑
摘要: 标准库 阅读全文
posted @ 2018-11-09 20:01 S&L·chuck 阅读(530) 评论(0) 推荐(0) 编辑
摘要: 错误处理 通过内置的错误接口提供了非常简单的错误处理机制。 error类型是一个接口类型 可以在编码中通过实现 error 接口类型来生成错误信息。 函数通常在最后的返回值中返回错误信息。使用errors.New 可返回一个错误信息 func testErr(num int) (int, error 阅读全文
posted @ 2018-11-09 20:00 S&L·chuck 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 程序测试 测试是一个可重复的过程,它验证某个东西是否按预期工作。一般通过 go test 进行测试,步骤如下 首先,是我们的文件名。Go 要求所有的测试都在以 _test.go 结尾的文件中。这使得我们在检查另一个 package 包的源代码时,确定哪些文件是测试和哪些文件实现功能非常容易。 在看了 阅读全文
posted @ 2018-11-09 20:00 S&L·chuck 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 类型转换(Type Conversion) 类型转换用于将一种数据类型的变量转换为另外一种类型的变,基本格式 示例 阅读全文
posted @ 2018-11-09 19:59 S&L·chuck 阅读(499) 评论(0) 推荐(0) 编辑
摘要: 语言指针 定义及使用 变量是一种使用方便的占位符,用于引用计算机内存地址。取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。 一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前你需要声明指针。 var type 为指针类型,var_name 为指针变量名, 号用于指定变量 阅读全文
posted @ 2018-11-09 19:55 S&L·chuck 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 包处理 package是go管理代码的重要工具,用于组织 Go 源代码,提供了更好的可重用性与可读性。 可见性 变量或函数名的首字母大写时,其就是可导出的,小写时则是不可导出的。 函数和变量的可访问性是以包做隔离的。 main 函数和 main 包 可执行的程序都必须包含一个 main 函数。这个函 阅读全文
posted @ 2018-11-09 19:54 S&L·chuck 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 结构体 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 定义 格式 声明 示例 使用 采用 “结构体.成员名” 的方式 阅读全文
posted @ 2018-11-09 19:53 S&L·chuck 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 面向对象(Methods, Interfaces) Method method是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在func后面增加了一个receiver(也就是method所依从的主体)。 语法 示例 注意 接收者不一样,那么method就不一样 method里面可 阅读全文
posted @ 2018-11-09 19:53 S&L·chuck 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 变量作用域 作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。 变量可以在三个地方声明: 函数内定义的变量称为局部变量 函数外定义的变量称为全局变量 函数定义中的变量称为形式参数 全局变量 在函数体外声明的变量称之为全局变量,全局变量可以在整个包甚至外部包(被导出后)使用, 阅读全文
posted @ 2018-11-09 19:52 S&L·chuck 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 流程控制(if/else,for/range) if if条件判断语句的语法概括起来就是:如果满足条件就做某事,否则做另一件事。 for 循环操作,既可以用来循环读取数据,又可以当作while来控制逻辑,还能迭代操作。它的语法如下: ` 示例: func testFor() { sum := 0 f 阅读全文
posted @ 2018-11-09 19:51 S&L·chuck 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 函数 定义 格式 解析 func:函数由 func 开始声明 function_name:函数名称,函数名和参数列表一起构成了函数签名。 parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数 阅读全文
posted @ 2018-11-09 19:51 S&L·chuck 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 基础类型 布尔值 布尔值的类型为bool,值是true或false,默认为false。 数值类型 整数类型有无符号和带符号两种。Go同时支持int和uint,这两种类型的长度相同,但具体长度取决于不同编译器的实现。Go里面也有直接定义好位数的类型:rune, int8, int16, int32, 阅读全文
posted @ 2018-11-09 19:50 S&L·chuck 阅读(143) 评论(0) 推荐(0) 编辑
摘要: Data类型(Arrays, Slices and Maps) array array就是数组,定义方式如下: 对数组的操作和其它语言类似,都是通过[]来进行读取或赋值,未赋值的元素,默认返回该类型的零值。 由于长度也是数组类型的一部分,因此[3]int与[4]int是不同的类型,数组也就不能改变长 阅读全文
posted @ 2018-11-09 19:50 S&L·chuck 阅读(482) 评论(0) 推荐(0) 编辑
摘要: 运算符 运算符 内置运算符 算术运算符 假定 A 值为 10,B 值为 20。 关系运算符 假定 A 值为 10,B 值为 20。 赋值运算符 其他运算符 运算符优先级 有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低: 阅读全文
posted @ 2018-11-09 19:49 S&L·chuck 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 变量和常量 变量 基本写法 ` 初始化 简化写法 _(下划线) 常量 常量是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。 阅读全文
posted @ 2018-11-09 19:48 S&L·chuck 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 语言基础 结构 基础组成: 程序 在开始编写应用之前,我们先从最基本的程序开始,在学习大部分语言之前,都会编写一个可以输出hello world的程序,如下所示 详解 Go程序是通过package来组织的 例子中是package main 这一行告诉我们当前文件属于哪个包,而包名main则告诉我们它 阅读全文
posted @ 2018-11-09 19:44 S&L·chuck 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 常见命令 go 命令 可以在控制台执行go来查看 go build 这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。 如果是普通包,就像我们在1.2节中编写的mymath包那样,当你执行go build之后,它不会产生任何文件。如果你需要在$GOPATH/pkg下生成 阅读全文
posted @ 2018-11-09 19:43 S&L·chuck 阅读(502) 评论(0) 推荐(0) 编辑