网络、模块和网页应用
tcp 服务器 这部分我们将使用 TCP 协议和协程范式编写一个简单的客户端 - 服务器应用,一个(web)服务器应用需要响应众多客户端的并发请求:go 会为每一个客户端产生一个协程用来处理请求。我...
错误处理
Go 有一个预先定义的 error 接口类型 type error interface { Error() string } 自定义错误 任何时候当你需要一个新的错误类型,都可以用 errors(必须先 import)包的 errors.New 函数接收合适...
读写数据
读取用户的输入 从键盘和标准输入 os.Stdin 读取输入,最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。请看以下程序: // 从控制台读取输入: package main import "fmt"...
接口与反射
接口是什么 Go 语言不是一种 “传统” 的面向对象编程语言:它里面没有类和继承的概念。 但是 Go 语言里有非常灵活的 接口 概念,通过它可以实现很多面向对象的特性。接口提供了一种方式来 说明...
结构与方法
结构体定义 type identifier struct { field1 type1 field2 type2 ... } type T struct {a, b int} 也是合法的语法,它更适用于简单的结构体。 结构体里的字段都有 名字,像 field1、field2 等...
包
常用标准库概述 像 fmt、os 等这样具有常用功能的内置包在 Go 语言中有 150 个以上,它们被称为标准库,大部分 (一些底层的除外) 内置于 Go 本身 unsafe: 包含了一些打破 Go 语言 “类型安全” ...
Map 数据类型
map 的声明与初始化 map 是引用类型,可以使用如下声明: var map1 map[keytype]valuetype var map1 map[string]int package main import "fmt" func main() { var mapLit map[string...
函数
Go 是编译型语言,所以函数编写的顺序是无关紧要的;鉴于可读性的需求,最好把 main() 函数写在文件的前面,其他函数按照一定逻辑顺序进行编写(例如函数被调用的顺序)。 编写多个函数的主要目...
控制结构
if-else 结构 if condition1 { // do something } else if condition2 { // do something else } else { // catch-all or default } else-if 分支的数量是没有限制的,但是为了代码的可读性,还...