39.1 database/sql包Go 提供了database/sql包用于对关系型数据库的访问,作为操作数据库的入口对象sql.DB,主要为我们提供了两个重要的功能:sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作.sql.DB 为我们管理数据库连接池需要注意的是,sql.DB表示操作数据库的抽象访问接口, 而非一个数据库连接对象;它可以根据driver打开关闭数据库连...
2019-11-28 阅读:5204
38.1 序列化与反序列化我们的数据对象要在网络中传输或保存到文件,就需要对其编码和解码动作,目前存在很多编码格式:JSON,XML,Gob,Google Protocol Buffer等,Go 语言当然也支持所有这些编码格式。序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。通过从存储区中读取对象的状...
2019-11-28 阅读:5610
37.1 context包在Go中,每个请求的request在单独的协程中进行,处理一个request也可能涉及多个协程之间的交互。一个请求衍生出的各个协程之间需要满足一定的约束关系,以实现一些诸如有效期,中止routine树,传递请求全局变量之类的功能。于是Go为我们提供一个解决方案,标准context包。使用context可以使开发者方便的在这些协程之间传递request相关的数据、取消协程的...
2019-11-28 阅读:5080
在Go中,搭建一个HTTP server简单到令人难以置信。只需要引入net/http包,写几行代码,一个HTTP服务器就可以正常运行并接受访问请求。下面就是Go最简单的HTTP服务器:package mainimport ( "fmt" "net/http")func myfunc(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, ...
2019-11-28 阅读:4867
标准库fmt包中,Printf()等方法可以做到输出格式化,当然,对于简单的例子来说足够了,但是我们有时候还是需要复杂的输出格式,甚至需要将格式化代码分离开来。这时,可以使用text/template和html/template。Go 官方库提供了两个模板库: text/template 和 html/template 。这两个库类似,当需要输出html格式的代码时需要使用 html/templa...
2019-11-28 阅读:4671
34.1 命令行写命令行程序时需要对命令参数进行解析,这时我们可以使用os库。os库可以通过变量Args来获取命令参数,os.Args返回一个字符串数组,其中第一个参数就是执行文件本身。package main import ( "fmt" "os") func main() { fmt.Println(os.Args)}编译执行后执行$ ./cmd -user="root" [...
2019-11-28 阅读:4755
33.1 Socket基础知识TCP/UDP、IP构成了网络通信的基石,TCP/IP是面向连接的通信协议,要求建立连接时进行3次握手确保连接已被建立,关闭连接时需要4次通信来保证客户端和服务端都已经关闭,也就是我们常说的三次握手,四次挥手。在通信过程中还有保证数据不丢失,在连接不畅通时还需要进行超时重试等等。Socket就是封装了这一套基于TCP/UDP/IP协议细节,提供了一系列套接字接口进行通...
2019-11-28 阅读:4342
32.1 fmt包格式化I/O上一章我们有提到fmt格式化I/O,这一章我们就详细来说说。在fmt包,有关格式化输入输出的方法就两大类:Scan 和 Print ,分别在scan.go 和 print.go 文件中。print.go文件中定义了如下函数:func Printf(format string, a ...interface{}) (n int, err error)func Fpr...
2019-11-28 阅读:4141
31.1 文件系统对于文件和目录的操作,Go主要在os包中提供了的相应方法:func Mkdir(name string, perm FileMode) error func Chdir(dir string) errorfunc TempDir() stringfunc Rename(oldpath, newpath string) errorfunc Chmod(name string, mo...
2019-11-28 阅读:4239
30.1 启动外部命令和程序os标准包,是一个比较重要的包,顾名思义,主要是在服务器上进行系统的基本操作,如文件操作,目录操作,执行命令,信号与中断,进程,系统状态等等。在os包下,有 exec,signal,user三个子包。在os包中,有很多有趣的功能,比如可以通过变量Args来获取命令参数,os.Args返回一个字符串数组。 fmt.Println(os.Args)在os包中,相关函数名...
2019-11-28 阅读:4293
29.1 sort包介绍Go语言标准库sort包中实现了几种基本的排序算法:插入排序、快排和堆排序,但在使用sort包进行排序时无需具体考虑使用那种排序方式。func insertionSort(data Interface, a, b int) func heapSort(data Interface, a, b int)func quickSort(data Interface, a, b, ...
2019-11-28 阅读:3766
28.1 unsafe 包func Alignof(x ArbitraryType) uintptrfunc Offsetof(x ArbitraryType) uintptrfunc Sizeof(x ArbitraryType) uintptrtype ArbitraryType inttype Pointer *ArbitraryType在unsafe包中,只提供了3个函数,两个类型。就这么...
2019-11-28 阅读:3860
27.1 反射(reflect)反射是应用程序检查其所拥有的结构,尤其是类型的一种能。每种语言的反射模型都不同,并且有些语言根本不支持反射。Go语言实现了反射,反射机制就是在运行时动态调用对象的方法和属性,即可从运行时态的示例对象反求其编码阶段的定义,标准库中reflect包提供了相关的功能。在reflect包中,通过reflect.TypeOf(),reflect.ValueOf()分别从类型、...
2019-11-28 阅读:3743
在Go语言中,所有的包都应该有必要文档和注释,当然同样甚至更为重要的是对包进行必要的测试。testing 包就是这样一个标准包,被专门用来进行单元测试以及进行自动化测试,打印日志和错误报告,方便程序员调试代码,并且还包含一些基准测试函数的功能。testing 包含测试函数、测试辅助代码和示例函数;测试函数包括Test开头的单元测试函数和以Benchmark开头的基准测试函数两种,测试辅助代码是为测...
2019-11-28 阅读:3519
25.1 Go 中的面向对象我们总结一下前面看到的:Go 没有类,而是松耦合的类型、方法对接口的实现。OO 语言最重要的三个方面分别是:封装,继承和多态,在 Go 中它们是怎样表现的呢?Go实现面向对象的两个关键是struct和interface,结构代替类,因为Go语言不提供类,但提供了结构体或自定义类型,方法可以被添加到结构体或自定义类型中。结构体之间可以嵌套,类似继承。而interface定...