摘要:
内存模型介绍 Go语言的内存模型规定了一种规则。这种规则可以保证,在一个goroutine读取某个变量的值,是其他goroutine对同一个变量写入的值。 建议 程序中多个goroutine同时修改相同数据,必须使之能够按序访问。为了按序访问以及保护数据,可以使用channel操作或者其他同步原语例 阅读全文
posted @ 2021-06-28 17:00
Οo白麒麟оΟ
阅读(209)
评论(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白麒麟оΟ
阅读(428)
评论(0)
推荐(0)
摘要:
定义一个正则表达式 调用regexp 下面的几个方法并传入一个正则的字符串形式的参数定义一个正则表达式 例如 :regexp.MustCompile("\d") Copy Compile CompilePOSIX MustCompile MustCompilePOSIX 方法概述 regexp包中有 阅读全文
posted @ 2021-06-28 16:56
Οo白麒麟оΟ
阅读(246)
评论(0)
推荐(0)
摘要:
fmt包简介 我们经常会使用 fmt 包,但是却没有思考过它的实现。我们会在这里使用一个 fmt.Printf,又会在那里使用一个 fmt.Sprintf。但是,如果你仔细研究下这个包,你会发现很多有趣有用的东西。 由于 Go 在大多数情况下会用来编写服务器或服务程序,我们主要的调试工具就是日志系统 阅读全文
posted @ 2021-06-28 16:54
Οo白麒麟оΟ
阅读(56)
评论(0)
推荐(0)
摘要:
将字符串写入文件 最常见的写文件就是将字符串写入文件。这个写起来非常的简单。这个包含以下几个阶段。 创建文件 将字符串写入文件 我们将得到如下代码。 Copy package main import ( "fmt" "os" ) func main() { f, err := os.Create(" 阅读全文
posted @ 2021-06-28 16:51
Οo白麒麟оΟ
阅读(307)
评论(0)
推荐(0)
摘要:
35. 读取文件 文件读取是所有编程语言中最常见的操作之一。本教程我们会学习如何使用 Go 读取文件。 本教程分为如下小节。 将整个文件读取到内存 使用绝对文件路径 使用命令行标记来传递文件路径 将文件绑定在二进制文件中 分块读取文件 逐行读取文件 将整个文件读取到内存 将整个文件读取到内存是最基本 阅读全文
posted @ 2021-06-28 16:49
Οo白麒麟оΟ
阅读(1800)
评论(0)
推荐(0)
摘要:
34. 反射 反射是 Go 语言的高级主题之一。 分为如下小节。 什么是反射? 为何需要检查变量,确定变量的类型? reflect 包 reflect.Type 和 reflect.Value reflect.Kind NumField() 和 Field() 方法 Int() 和 String() 阅读全文
posted @ 2021-06-28 16:45
Οo白麒麟оΟ
阅读(65)
评论(0)
推荐(0)
摘要:
33. 函数是一等公民(头等函数) 现在简单概括一下本教程讨论的内容: 什么是头等函数? 匿名函数 用户自定义的函数类型 高阶函数 把函数作为参数,传递给其它函数 在其它函数中返回函数 闭包 头等函数的实际用途 什么是头等函数? 支持头等函数(First Class Function)的编程语言,可 阅读全文
posted @ 2021-06-28 16:43
Οo白麒麟оΟ
阅读(46)
评论(0)
推荐(0)
摘要:
32. panic 和 recover 什么是 panic? 在 Go 语言中,程序中一般是使用[错误]来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。 但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 panic 来终止程序。当[函数]发生 panic 时, 阅读全文
posted @ 2021-06-28 16:39
Οo白麒麟оΟ
阅读(86)
评论(0)
推荐(0)
摘要:
31. 自定义错误 使用 New 函数创建自定义错误 创建自定义错误最简单的方法是使用 [errors]包中的 [New]函数。 在使用 New [函数]创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 [errors 包]中的 New 函数的实现。 Copy // Packag 阅读全文
posted @ 2021-06-28 16:37
Οo白麒麟оΟ
阅读(197)
评论(0)
推荐(0)
摘要:
30. 错误处理 什么是错误? 错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。 在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。 就像其他的内建类型(如 int、float64 等),错误值可以存储 阅读全文
posted @ 2021-06-28 16:31
Οo白麒麟оΟ
阅读(121)
评论(0)
推荐(1)
摘要:
29. Defer 什么是 defer? defer 语句的用途是:含有 defer 语句的函数,会在该函数将要返回之前,调用另一个函数。这个定义可能看起来很复杂,我们通过一个示例就很容易明白了。 示例 Copy package main import ( "fmt" ) func finished 阅读全文
posted @ 2021-06-28 16:30
Οo白麒麟оΟ
阅读(174)
评论(0)
推荐(0)
摘要:
28. 多态 Go 通过[接口]来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部[方法],那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 使用接口实现多态 一个类型如果定义了接口的所有方法,那它就隐式地实现了该接口。 所有 阅读全文
posted @ 2021-06-28 16:29
Οo白麒麟оΟ
阅读(247)
评论(0)
推荐(0)
摘要:
27. 组合取代继承 Go 不支持继承,但它支持组合(Composition)。组合一般定义为“合并在一起”。汽车就是一个关于组合的例子:一辆汽车由车轮、引擎和其他各种部件组合在一起。 通过嵌套结构体进行组合 在 Go 中,通过在结构体内嵌套结构体,可以实现组合。 组合的典型例子就是博客帖子。每一个 阅读全文
posted @ 2021-06-28 16:28
Οo白麒麟оΟ
阅读(92)
评论(0)
推荐(0)
摘要:
26. 结构体取代类 Go 支持面向对象吗? Go 并不是完全面向对象的编程语言。Go 官网回答了 Go 是否是面向对象语言,摘录如下。 可以说是,也可以说不是。虽然 Go 有类型和方法,支持面向对象的编程风格,但却没有类型的层次结构。Go 中的“接口”概念提供了一种不同的方法,我们认为它易于使用, 阅读全文
posted @ 2021-06-28 16:27
Οo白麒麟оΟ
阅读(64)
评论(0)
推荐(0)
摘要:
25. Mutex 临界区 在学习 Mutex 之前,我们需要理解并发编程中临界区(Critical Section)的概念。当程序并发地运行时,多个 [Go 协程]不应该同时访问那些修改共享资源的代码。这些修改共享资源的代码称为临界区。例如,假设我们有一段代码,将一个变量 x 自增 1。 Copy 阅读全文
posted @ 2021-06-28 16:25
Οo白麒麟оΟ
阅读(110)
评论(0)
推荐(0)
摘要:
24. Select 什么是 select? select 语句用于在多个发送/接收信道操作中进行选择。select 语句会一直阻塞,直到发送/接收操作准备就绪。如果有多个信道操作准备完毕,select 会随机地选取其中之一执行。该语法与 switch 类似,所不同的是,这里的每个 case 语句都 阅读全文
posted @ 2021-06-28 16:24
Οo白麒麟оΟ
阅读(90)
评论(0)
推荐(0)
摘要:
23. 缓冲信道和工作池(Buffered Channels and Worker Pools) 什么是缓冲信道? 在[上一教程]里,我们讨论的主要是无缓冲信道。我们在[信道]的教程里详细讨论了,无缓冲信道的发送和接收过程是阻塞的。 我们还可以创建一个有缓冲(Buffer)的信道。只在缓冲已满的情况 阅读全文
posted @ 2021-06-28 16:23
Οo白麒麟оΟ
阅读(68)
评论(0)
推荐(0)
摘要:
22. 信道(channel) 什么是信道? 信道可以想像成 Go 协程之间通信的管道。如同管道中的水会从一端流到另一端,通过使用信道,数据也可以从一端发送,在另一端接收。 信道的声明 所有信道都关联了一个类型。信道只能运输这种类型的数据,而运输其他类型的数据都是非法的。 chan T 表示 T 类 阅读全文
posted @ 2021-06-28 16:22
Οo白麒麟оΟ
阅读(76)
评论(0)
推荐(0)
摘要:
Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。 Go 协程相比于线程的优势 相比线程而言,Go 协程的成本极低。堆栈大小只有若干 阅读全文
posted @ 2021-06-28 16:20
Οo白麒麟оΟ
阅读(184)
评论(0)
推荐(0)
摘要:
Go 是并发式语言,而不是并行式语言。在讨论 Go 如何处理并发之前,我们必须理解何为并发,以及并发与并行的区别。 并发是什么? 并发是指立即处理多个任务的能力。一个例子就能很好地说明这一点。 我们可以想象一个人正在跑步。假如在他晨跑时,鞋带突然松了。于是他停下来,系一下鞋带,接下来继续跑。这个例子 阅读全文
posted @ 2021-06-28 16:18
Οo白麒麟оΟ
阅读(75)
评论(0)
推荐(0)
摘要:
19. 接口(二) 实现接口:指针接受者与值接受者 在接口(一)上的所有示例中,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实现接口。只不过在用指针接受者实现接口时,还有一些细节需要注意。我们通过下面的代码来理解吧 阅读全文
posted @ 2021-06-28 16:16
Οo白麒麟оΟ
阅读(62)
评论(0)
推荐(0)
摘要:
目录 什么是接口? 接口的声明与实现 接口的实际用途 接口的内部表示 空接口 类型断言 类型选择(Type Switch) 什么是接口? 在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。 在 Go 语言 阅读全文
posted @ 2021-06-28 16:15
Οo白麒麟оΟ
阅读(81)
评论(0)
推荐(0)
摘要:
17. 方法 什么是方法? 方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。 下面就是创建一个方法的语法。 Copy func (t Type) methodName(parameter 阅读全文
posted @ 2021-06-28 16:13
Οo白麒麟оΟ
阅读(95)
评论(0)
推荐(0)
摘要:
16. 结构体 什么是结构体? 结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。 例如,一个职员有 firstName、lastName 和 age 三个属性,而把这些属性组合在一个结构体 employee 中 阅读全文
posted @ 2021-06-28 16:11
Οo白麒麟оΟ
阅读(54)
评论(0)
推荐(0)
摘要:
15. 指针 什么是指针? 指针是一种存储变量内存地址(Memory Address)的变量。 如上图所示,变量 b 的值为 156,而 b 的内存地址为 0x1040a124。变量 a 存储了 b 的地址。我们就称 a 指向了 b。 指针的声明 指针变量的类型为 *T,该指针指向一个 T 类型的变 阅读全文
posted @ 2021-06-28 16:07
Οo白麒麟оΟ
阅读(59)
评论(0)
推荐(0)
摘要:
14. 字符串 什么是字符串? Go 语言中的字符串是一个字节切片。把内容放在双引号""之间,我们可以创建一个字符串。让我们来看一个创建并打印字符串的简单示例。 Copy package main import ( "fmt" ) func main() { name := "Hello World 阅读全文
posted @ 2021-06-28 16:06
Οo白麒麟оΟ
阅读(40)
评论(0)
推荐(0)
摘要:
13. Maps 什么是 map ? map 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。 如何创建 map ? 通过向 make 函数传入键和值的类型,可以创建 map。make(map[type of key]type of value) 是创建 ma 阅读全文
posted @ 2021-06-28 16:02
Οo白麒麟оΟ
阅读(67)
评论(0)
推荐(0)
摘要:
12. 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数。 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最后一个参数。 请注意只有函数的最后一个参数才允许是可变的。 通过一些例子理解可变参数函数如何工作 你是否曾经想过 append 函 阅读全文
posted @ 2021-06-28 15:56
Οo白麒麟оΟ
阅读(138)
评论(0)
推荐(0)
摘要:
11. 数组和切片 数组 数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型) 数组的声明 一个数组的表示形式为 [n]T。n 表 阅读全文
posted @ 2021-06-28 15:52
Οo白麒麟оΟ
阅读(73)
评论(0)
推荐(0)
摘要:
10. switch 语句 switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 if else 子句的常用方式。 看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字 阅读全文
posted @ 2021-06-28 15:49
Οo白麒麟оΟ
阅读(52)
评论(0)
推荐(0)
摘要:
9. 循环 循环语句是用来重复执行某一段代码。 for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环。 for 循环语法 Copy for initialisation; condition; post { } 初始化语句只执行一 阅读全文
posted @ 2021-06-28 15:47
Οo白麒麟оΟ
阅读(207)
评论(0)
推荐(0)
摘要:
8. if-else 语句 if 是条件语句。if 语句的语法是 Copy if condition { } 如果 condition 为真,则执行 { 和 } 之间的代码。 不同于其他语言,例如 C 语言,Go 语言里的 { } 是必要的,即使在 { } 之间只有一条语句。 if 语句还有可选的 阅读全文
posted @ 2021-06-28 15:45
Οo白麒麟оΟ
阅读(84)
评论(0)
推荐(0)
摘要:
7. 包 什么是包,为什么使用包? 到目前为止,我们看到的 Go 程序都只有一个文件,文件里包含一个 main 函数和几个其他的函数。在实际中,这种把所有源代码编写在一个文件的方法并不好用。以这种方式编写,代码的重用和维护都会很困难。而包(Package)解决了这样的问题。 包用于组织 Go 源代码 阅读全文
posted @ 2021-06-28 15:42
Οo白麒麟оΟ
阅读(96)
评论(0)
推荐(0)
摘要:
6. 函数(Function) 函数是什么? 函数是一块执行特定任务的代码。一个函数是在输入源基础上,通过执行一系列的算法,生成预期的输出。 函数的声明 在 Go 语言中,函数声明通用语法如下: Copy func functionname(parametername type) returntyp 阅读全文
posted @ 2021-06-28 15:39
Οo白麒麟оΟ
阅读(58)
评论(0)
推荐(0)
摘要:
5. 常量 定义 在 Go 语言中,术语"常量"用于表示固定的值。比如 5 、-89、 I love Go、67.89 等等。 看看下面的代码: var a int = 50 var b string = "I love Go" 在上面的代码中,变量 a 和 b 分别被赋值为常量 50 和 I lo 阅读全文
posted @ 2021-06-28 15:35
Οo白麒麟оΟ
阅读(78)
评论(0)
推荐(0)
摘要:
4. 类型 下面是 Go 支持的基本类型: bool 数字类型 int8, int16, int32, int64, int uint8, uint16, uint32, uint64, uint float32, float64 complex64, complex128 byte rune st 阅读全文
posted @ 2021-06-28 15:33
Οo白麒麟оΟ
阅读(61)
评论(0)
推荐(0)
摘要:
3. 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。 声明单个变量 var name type 是声明单个变量的语法。 Copy package main import "fmt" func mai 阅读全文
posted @ 2021-06-28 15:30
Οo白麒麟оΟ
阅读(194)
评论(0)
推荐(0)
摘要:
2. Hello World 建立 Go 工作区 在编写代码之前,我们首先应该建立 Go 的工作区(Workspace)。 在 Mac 或 Linux 操作系统下,Go 工作区应该设置在 HOME/go∗∗。所以我们要在∗∗HOME/go∗∗。所以我们要在∗∗ HOME 目录下创建 go 目录。 而 阅读全文
posted @ 2021-06-28 15:25
Οo白麒麟оΟ
阅读(61)
评论(0)
推荐(0)
摘要:
VS Code是微软开源的一款编辑器,插件系统十分的丰富。下面介绍如何用VS Code搭建go语言开发环境 ##一 下载与安装 VS Code官方下载地址:https://code.visualstudio.com/Download 三大主流平台都支持,请根据自己的电脑平台选择对应的安装包。 双击下 阅读全文
posted @ 2021-06-28 15:11
Οo白麒麟оΟ
阅读(84)
评论(0)
推荐(0)
摘要:
Go包管理 一 包管理历史 Golang 的包管理一直被大众所诟病的一个点,但是我们可以看到现在确实是在往好的方向进行发展。下面是官方的包管理工具的发展历史: 在 1.5 版本之前,所有的依赖包都是存放在 GOPATH 下,没有版本控制。这个类似 Google 使用单一仓库来管理代码的方式。这种方式 阅读全文
posted @ 2021-06-28 15:10
Οo白麒麟оΟ
阅读(236)
评论(0)
推荐(0)
摘要:
一 GoLand集成开发环境下载 IDE 下载地址:http://www.jetbrains.com/go/?fromMenu IDE安装就是平常的傻瓜式安装,这里就不多说了。 二 使用GoLand 1、 双击运行安装完的GoLand,选择创建项目,并关联GOROOT(会自动关联) 2、在项目上点击 阅读全文
posted @ 2021-06-28 15:06
Οo白麒麟оΟ
阅读(384)
评论(0)
推荐(0)
摘要:
目录 一 下载地址 二 安装 Linux安装 Windows安装 Mac安装 三 测试安装 四 命令介绍 基本介绍 build 和 run 命令 get 命令 一 下载地址 安装包下载地址为:https://golang.org/dl/。 如果打不开可以使用这个地址:https://golang.g 阅读全文
posted @ 2021-06-28 15:03
Οo白麒麟оΟ
阅读(83)
评论(0)
推荐(0)

浙公网安备 33010602011771号