go6.0
6.0 并发go语言常被描述成一种适用于并发的语言。主要是因为go语言在2种强大的机制上提供了简单的语法支持:go协程和通道。 链接 目录 上一章:继续之前 下一节:go协程
6.0 并发go语言常被描述成一种适用于并发的语言。主要是因为go语言在2种强大的机制上提供了简单的语法支持:go协程和通道。 链接 目录 上一章:继续之前 下一节:go协程
6.1 go协程go协程类似一个线程,但是go协程是由go自己调度,而不是系统。在协程中的代码可以和其他代码并发执行。让我们看一个例子: 1234567891011121314151617package mainimport ( "fmt" "time")func main() { fmt.Println("sta...
6.2 同步创建一个协程没有什么难度,并且启动很多协程开销也不大。但是,并发执行的代码需要协同。为了帮助我们解决这个问题,go提供了通道(channels)。在学习通道之前,我认为有必要先学习了并发编程的基本知识。 在编写并发执行的代码时,你需要特别的关注在哪里和如何读写一个值。出于某些原因,例如没有垃圾回收的语言,需要你从一个新的角度去考虑你的数据,总是警惕着可能存在的危险。例如: 123...
6.3 通道并发编程的挑战主要在于数据共享。如果你的go协程没有共享数据,你就不需要担心同步他们。但是,对于所有的系统,这不是一个选择。实际上,很多系统以完全相反的目标构建:在多个请求中共享数据。内存缓存或者数据库都是这方面的好例子。这正变得越来越流行的事实。 通道通过解决数据共享问题,让并发编程变得更加清晰。通道是一个通信管道,它用于go协程之间传递数据。换句话说,go协程可以通过通道,传...
6.4 继续之前如果你才开始进入并发编程的世界,它看起来似乎势不可挡。它绝对需要非常多的关注。go目标就在于让并发更容易。 go协程很有效的抽象了我们需要并发执行的代码。通道通过消除共享数据,帮助我们消除了一些当数据共享时导致的严重bug。这不仅仅是消除bug,但是它改变了我们如何进行并发编程。你可以认为是通过信息传递实现并发编程,而不是那些容易出错的代码。 话虽如此,我仍然在广泛使用syn...
关于本书授权许可本书中的内容使用 CC BY-NC-SA 4.0(署名 - 非商业性使用 - 相同方式共享4.0许可协议)授权。你不必为此书付费。你可以免费的复制、发布、修改或者展示此书。但是,这本书的版权归原作者Karl Seguin所有,不要将此书用于商业目的。 关于许可证的全部内容你可以浏览以下网站: http://creativecommons.org/licenses/by-nc...
目录 关于本书 引言 准备工作 第1章 基础知识 1.1 编译 1.2 静态类型 1.3 类c语法 1.4 垃圾回收 1.5 运行go代码 1.6 导入包 1.7 变量和声明 1.8 函数声明 1.9 继续之前 第2章:结构体 2.1 声明和初始化 2.2 结构体上的函数 2.3 构造函数 2.4 new 2.5 结构体字段 2.6 组合 2.7 指针类型和值类型 2.8 继续...
6.4 总结我最近听go被描述成一门无聊的语言。无聊时因为很容易学,容易写,更重要的是容易读。也许,我实际帮了个倒忙。我已经用了3章谈论类型并介绍了如何声明变量。 如果你有静态类型语言的编程背景,最好情况下,我们看到的大多数可能只是复习一下而已。go语言让指针用起来更明显且易用了,并且go将数组封装成切片,对经验丰富的java和c#程序员来说,不是什么压倒性的优势。 如果你主要是使用动态型语...
准备工作链接 目录 上一章:引言 下一章:第1章
引言当开始学习一门新的语言时,我总有一种既爱又恨的感觉。一方面,语言是我们做事情的基础,即使是小的变化,也会带来明显的效果。当一些事情恍然大悟时,会给如何编程带来持久的影响,并且能够重新定义你关于其他语言的期望。不利的一面是,语言设计是一个持续的过程。学习新的关键字、系统类型、编码风格、新的库、社区和范例,似乎很难解释这些需要付出许多努力。和那些我们必须学习的事相比较,花费时间去学习新语言常...