摘要:
有时候我们想使用和集合的自然排序不同的方法对集合进行排序。例如,我们想按照字母的长度而不是首字母顺序对字符串排序。这里是一个 Go 自定义排序的例子。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
随笔分类 - golang
go语言从例子开始之Example38.排序
2019-10-31 17:06 by _天枢, 274 阅读, 收藏, 编辑
摘要:
Go 的 sort 包实现了内置和用户自定义数据类型的排序功能。我们首先关注内置数据类型的排序。 Example: a := sort.StringsAreSorted(strarr) fmt.Println("Sorted:", a) a := sort.StringsAreSorted(stra 阅读全文
go语言从例子开始之Example37.Go 状态协程
2019-10-31 16:54 by _天枢, 328 阅读, 收藏, 编辑
摘要:
在前面的例子中,我们用互斥锁进行了明确的锁定来让共享的state 跨多个 Go 协程同步访问。另一个选择是使用内置的 Go协程和通道的的同步特性来达到同样的效果。这个基于通道的方法和 Go 通过通信以及 每个 Go 协程间通过通讯来共享内存,确保每块数据有单独的 Go 协程所有的思路是一致的。 Ex 阅读全文
go语言从例子开始之Example36.互斥锁
2019-10-31 14:41 by _天枢, 296 阅读, 收藏, 编辑
摘要:
在前面的例子中,我们看到了如何使用原子操作来管理简单的计数器。对于更加复杂的情况,我们可以使用一个互斥锁来在 Go 协程间安全的访问数据。 Example: Result: 运行这个程序,显示我们对已进行了同步的 state 执行了3,500,000 次操作。 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example35.原子计数器
2019-10-30 10:26 by _天枢, 458 阅读, 收藏, 编辑
摘要:
Go 中最主要的状态管理方式是通过通道间的沟通来完成的,我们在工作池的例子中碰到过,但是还是有一些其他的方法来管理状态的。这里我们将看看如何使用 sync/atomic包在多个 Go 协程中进行 原子计数 。 Example: Result: 执行这个程序,显示我们执行了大约 6312891 次操作 阅读全文
go语言学习之从例子开始
2019-10-30 10:03 by _天枢, 733 阅读, 收藏, 编辑
摘要:
[目录] go语言从例子开始之Example1.helloworld go语言从例子开始之Example2.类型 go语言从例子开始之Example3.变量 go语言从例子开始之Example4.常量 go语言从例子开始之Example5.for循环 go语言从例子开始之Example6.if/el 阅读全文
go语言从例子开始之Example34.速率限制
2019-10-30 09:24 by _天枢, 297 阅读, 收藏, 编辑
摘要:
速率限制(英) 是一个重要的控制服务资源利用和质量的途径。Go 通过 Go 协程、通道和打点器优美的支持了速率限制。 Example: Result: 运行程序,我们看到第一批请求意料之中的大约每 200ms 处理一次。 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example33.工作池
2019-10-29 14:20 by _天枢, 296 阅读, 收藏, 编辑
摘要:
在这个例子中,我们将看到如何使用 Go 协程和通道实现一个工作池 。 Example: Result: 执行这个程序,显示 9 个任务被多个 worker 执行。整个程序处理所有的任务仅执行了 3s 而不是 9s,是因为 3 个 worker是并行的。 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example32.打点器
2019-10-29 11:06 by _天枢, 323 阅读, 收藏, 编辑
摘要:
定时器 是当你想要在未来某一刻执行一次时使用的 - 打点器 则是当你想要在固定的时间间隔重复执行准备的。这里是一个打点器的例子,它将定时的执行,直到我们将它停止。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example31.定时器
2019-10-29 09:44 by _天枢, 311 阅读, 收藏, 编辑
摘要:
我们常常需要在后面一个时刻运行 Go 代码,或者在某段时间间隔内重复运行。 Go 的内置 定时器 和 打点器 特性让这些很容易实现。我们将先学习定时器,然后再学习打点器。 Example: Result: 阅读全文
go语言从例子开始之Example30.通道遍历
2019-10-29 09:27 by _天枢, 209 阅读, 收藏, 编辑
摘要:
在前面的例子中,我们讲过 for 和 range为基本的数据结构提供了迭代的功能。我们也可以使用这个语法来遍历从通道中取得的值 Example: Result: 坐标:上一个例子 下一个例子 阅读全文
go语言从例子开始之Example29.关闭通道
2019-10-29 09:22 by _天枢, 261 阅读, 收藏, 编辑
摘要:
关闭 一个通道意味着不能再向这个通道发送值了。这个特性可以用来给这个通道的接收方传达工作已经完成的信息。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example28.非阻塞通道操作
2019-10-28 15:28 by _天枢, 435 阅读, 收藏, 编辑
摘要:
常规的通过通道发送和接收数据是阻塞的。然而,我们可以使用带一个 default 子句的 select 来实现非阻塞 的发送、接收,甚至是非阻塞的多路 select。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example27.超时处理
2019-10-28 15:21 by _天枢, 235 阅读, 收藏, 编辑
摘要:
超时 对于一个连接外部资源,或者其它一些需要花费执行时间的操作的程序而言是很重要的。得益于通道和 select,在 Go中实现超时操作是简洁而优雅的。 Example: Result: timeout 1 two 运行这个程序,首先显示运行超时的操作,然后是成功接收的。 使用这个 select 超时 阅读全文
go语言从例子开始之Example26.通道选择器
2019-10-28 14:33 by _天枢, 243 阅读, 收藏, 编辑
摘要:
Go 的通道选择器 让你可以同时等待多个通道操作。Go 协程和通道以及选择器的结合是 Go 的一个强大特性。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example25.通道方向
2019-10-28 14:28 by _天枢, 291 阅读, 收藏, 编辑
摘要:
当使用通道作为函数的参数时,你可以指定这个通道是不是只用来发送或者接收值。这个特性提升了程序的类型安全性。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example24.通道同步
2019-10-28 14:17 by _天枢, 301 阅读, 收藏, 编辑
摘要:
我们可以使用通道来同步 Go 协程间的执行状态。这里是一个使用阻塞的接受方式来等待一个 Go 协程的运行结束。 Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example23.通道缓冲
2019-10-28 10:40 by _天枢, 218 阅读, 收藏, 编辑
摘要:
默认通道是 无缓冲 的,这意味着只有在对应的接收(<- chan)通道准备好接收时,才允许进行发送(chan <-)。可缓存通道允许在没有对应接收方的情况下,缓存限定数量的值。 不支持缓冲: Example: Result: 坐标: 上一个例子 下一个例子 阅读全文
go语言从例子开始之Example22.协程之通道
2019-10-28 10:32 by _天枢, 268 阅读, 收藏, 编辑
摘要:
通道 是连接多个 Go 协程的管道。你可以从一个 Go 协程将值发送到通道,然后在别的 Go 协程中接收。 Example: Result: 我们运行程序时,通过通道,消息 "value" 成功的从一个 Go 协程传到另一个中 默认发送和接收操作是阻塞的,直到发送方和接收方都准备完毕。这个特性允许我 阅读全文
go语言从例子开始之Example21.协程
2019-10-28 10:21 by _天枢, 373 阅读, 收藏, 编辑
摘要:
Go 协程 在执行上来说是轻量级的线程。 golang使用协程用go关键字。后边正常调用函数。 Example: Result: 从结果可以看出,direct是阻塞输出。goroutine和sk是异步交替输出。 坐标: 上一个例子 下一个例子 阅读全文