摘要: 内存模型介绍 Go语言的内存模型规定了一种规则。这种规则可以保证,在一个goroutine读取某个变量的值,是其他goroutine对同一个变量写入的值。 建议 程序中多个goroutine同时修改相同数据,必须使之能够按序访问。为了按序访问以及保护数据,可以使用channel操作或者其他同步原语例 阅读全文
posted @ 2021-06-28 17:00 Οo白麒麟оΟ 阅读(175) 评论(0) 推荐(0) 编辑
摘要: Go语言对json的解析函数在encoding/json包里面,主要是编码和解码两个函数。 Marshal函数 Copy func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码 注意: 布尔类型编码为json布尔类型。 浮点数、 阅读全文
posted @ 2021-06-28 16:58 Οo白麒麟оΟ 阅读(415) 评论(0) 推荐(0) 编辑
摘要: 定义一个正则表达式 调用regexp 下面的几个方法并传入一个正则的字符串形式的参数定义一个正则表达式 例如 :regexp.MustCompile("\d") Copy Compile CompilePOSIX MustCompile MustCompilePOSIX 方法概述 regexp包中有 阅读全文
posted @ 2021-06-28 16:56 Οo白麒麟оΟ 阅读(237) 评论(0) 推荐(0) 编辑
摘要: fmt包简介 我们经常会使用 fmt 包,但是却没有思考过它的实现。我们会在这里使用一个 fmt.Printf,又会在那里使用一个 fmt.Sprintf。但是,如果你仔细研究下这个包,你会发现很多有趣有用的东西。 由于 Go 在大多数情况下会用来编写服务器或服务程序,我们主要的调试工具就是日志系统 阅读全文
posted @ 2021-06-28 16:54 Οo白麒麟оΟ 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 将字符串写入文件 最常见的写文件就是将字符串写入文件。这个写起来非常的简单。这个包含以下几个阶段。 创建文件 将字符串写入文件 我们将得到如下代码。 Copy package main import ( "fmt" "os" ) func main() { f, err := os.Create(" 阅读全文
posted @ 2021-06-28 16:51 Οo白麒麟оΟ 阅读(274) 评论(0) 推荐(0) 编辑
摘要: 35. 读取文件 文件读取是所有编程语言中最常见的操作之一。本教程我们会学习如何使用 Go 读取文件。 本教程分为如下小节。 将整个文件读取到内存 使用绝对文件路径 使用命令行标记来传递文件路径 将文件绑定在二进制文件中 分块读取文件 逐行读取文件 将整个文件读取到内存 将整个文件读取到内存是最基本 阅读全文
posted @ 2021-06-28 16:49 Οo白麒麟оΟ 阅读(1757) 评论(0) 推荐(0) 编辑
摘要: 34. 反射 反射是 Go 语言的高级主题之一。 分为如下小节。 什么是反射? 为何需要检查变量,确定变量的类型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 阅读全文
posted @ 2021-06-28 16:45 Οo白麒麟оΟ 阅读(58) 评论(0) 推荐(0) 编辑
摘要: 33. 函数是一等公民(头等函数) 现在简单概括一下本教程讨论的内容: 什么是头等函数? 匿名函数 用户自定义的函数类型 高阶函数 把函数作为参数,传递给其它函数 在其它函数中返回函数 闭包 头等函数的实际用途 什么是头等函数? 支持头等函数(First Class Function)的编程语言,可 阅读全文
posted @ 2021-06-28 16:43 Οo白麒麟оΟ 阅读(38) 评论(0) 推荐(0) 编辑
摘要: 32. panic 和 recover 什么是 panic? 在 Go 语言中,程序中一般是使用[错误]来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。 但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 panic 来终止程序。当[函数]发生 panic 时, 阅读全文
posted @ 2021-06-28 16:39 Οo白麒麟оΟ 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 31. 自定义错误 使用 New 函数创建自定义错误 创建自定义错误最简单的方法是使用 [errors]包中的 [New]函数。 在使用 New [函数]创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 [errors 包]中的 New 函数的实现。 Copy // Packag 阅读全文
posted @ 2021-06-28 16:37 Οo白麒麟оΟ 阅读(188) 评论(0) 推荐(0) 编辑
摘要: 30. 错误处理 什么是错误? 错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。 在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。 就像其他的内建类型(如 int、float64 等),错误值可以存储 阅读全文
posted @ 2021-06-28 16:31 Οo白麒麟оΟ 阅读(106) 评论(0) 推荐(1) 编辑
摘要: 29. Defer 什么是 defer? defer 语句的用途是:含有 defer 语句的函数,会在该函数将要返回之前,调用另一个函数。这个定义可能看起来很复杂,我们通过一个示例就很容易明白了。 示例 Copy package main import ( "fmt" ) func finished 阅读全文
posted @ 2021-06-28 16:30 Οo白麒麟оΟ 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 28. 多态 Go 通过[接口]来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部[方法],那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 使用接口实现多态 一个类型如果定义了接口的所有方法,那它就隐式地实现了该接口。 所有 阅读全文
posted @ 2021-06-28 16:29 Οo白麒麟оΟ 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 27. 组合取代继承 Go 不支持继承,但它支持组合(Composition)。组合一般定义为“合并在一起”。汽车就是一个关于组合的例子:一辆汽车由车轮、引擎和其他各种部件组合在一起。 通过嵌套结构体进行组合 在 Go 中,通过在结构体内嵌套结构体,可以实现组合。 组合的典型例子就是博客帖子。每一个 阅读全文
posted @ 2021-06-28 16:28 Οo白麒麟оΟ 阅读(77) 评论(0) 推荐(0) 编辑
摘要: 26. 结构体取代类 Go 支持面向对象吗? Go 并不是完全面向对象的编程语言。Go 官网回答了 Go 是否是面向对象语言,摘录如下。 可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提供了一种不同的方法,我们认为它易于使用, 阅读全文
posted @ 2021-06-28 16:27 Οo白麒麟оΟ 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 25. Mutex 临界区 在学习 Mutex 之前,我们需要理解并发编程中临界区(Critical Section)的概念。当程序并发地运行时,多个 [Go 协程]不应该同时访问那些修改共享资源的代码。这些修改共享资源的代码称为临界区。例如,假设我们有一段代码,将一个变量 x 自增 1。 Copy 阅读全文
posted @ 2021-06-28 16:25 Οo白麒麟оΟ 阅读(102) 评论(0) 推荐(0) 编辑
摘要: 24. Select 什么是 select? select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case 语句都 阅读全文
posted @ 2021-06-28 16:24 Οo白麒麟оΟ 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 23. 缓冲信道和工作池(Buffered Channels and Worker Pools) 什么是缓冲信道? 在[上一教程]里,我们讨论的主要是无缓冲信道。我们在[信道]的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况 阅读全文
posted @ 2021-06-28 16:23 Οo白麒麟оΟ 阅读(54) 评论(0) 推荐(0) 编辑
摘要: 22. 信道(channel) 什么是信道? 信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到另一端,通过使用信道,数据也可以从一端发送,在另一端接收。 信道的声明 所有信道都关联了一个类型。信道只能运输这种类型的数据,而运输其他类型的数据都是非法的。 chan T 表示 T 类 阅读全文
posted @ 2021-06-28 16:22 Οo白麒麟оΟ 阅读(66) 评论(0) 推荐(0) 编辑
摘要: Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。 Go 协程相比于线程的优势 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 阅读全文
posted @ 2021-06-28 16:20 Οo白麒麟оΟ 阅读(161) 评论(0) 推荐(0) 编辑