自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

www.iqer.info

www.iqer.info

  • 博客(130)
  • 收藏
  • 关注

原创 Python矩阵库 numpy 文档 中文翻译

list中的数据可以不同类型的数据,但array中必须是同构的数据结构numpy比list更快,numpy使用更少的内存占用来存储数据,并提供了指明数据类型的机制。这让代码优化更进一步。

2023-08-04 16:18:52 235

原创 Flutter学习资料

慕课网Flutter课程flutter weeklyflutter bookflutter实战

2023-05-30 21:31:08 99

原创 Go by Example: Text Templates

Go为创建动态内容或使用text/template包向用户显示自定义输出提供了内置支持. 一个名为html/template的同级包提供了相同的API, 但具有额外的安全性, 应该用于生成HTML.下一节将介绍: 正则表达式。

2023-05-30 21:24:31 113

原创 Go by Example: String Formatting 格式化字符串

Go为传统的printf字符串格式化提供了出色的支持. 下面是一些常见的字符串格式化任务的示例.下一节将介绍: Text Templates。

2023-05-30 21:24:22 149

原创 Go by Example: Recover

这里有一个例子可以说明这是很有用的: 如果一个客户端连接出现严重错误, 服务器不希望崩溃.相反, 服务器希望关闭该链接并继续为其他客户端提供服务.事实上, 这就是Go的net/http包默认为HTTP服务器所做的.通过使用内置的recover函数, 使得Go从panic中恢复成为可能. recover可以阻止因panic而终止程序, 而是让程序继续执行.下一节将介绍: 字符串函数。

2023-05-30 21:23:21 50

原创 Go by Example: String Functions 字符串函数

标准库的strings包提供了许多有用的与字符串相关的函数, 这里有一些例子可以让你对这个包有个概念.下一节介绍:格式化字符串。

2023-05-30 21:22:41 52

原创 Go by Example: Defer

Defer用于确保函数调用在程序执行的后期执行, 通常时出于清理目的.Defer通常用于其他语言中使用的地方如ensure或者finally.下一节将介绍: Recover恢复。运行程序确认文件在写入后已关闭.

2023-05-30 21:22:31 38

原创 Go by Example: Sorting by Functions

通过遵循创建自定义类型的相同模式, 在该类型上实现三个Interface方法, 然后调用sort.Sort对自定义类型的集合进行排序, 我们可以通过任意函数对Go切片进行排序.有时, 我们想要按自然顺序以外的方式对集合进行排序. 例如, 假设我们希望按字符串长度而不是字母顺序排序. 下面是一个Go中自定义排序的例子.运行我们的程序会显示一个按字符串长度排序的列表。下一节将介绍: Panic.

2023-05-29 20:49:58 44

原创 Go by Example: Panic

Panic通常意味着事情出乎意料地出错了.大多数情况下, 我们使用它来快速处理在正常操作中不应该发生的错误, 或者我们没有准备好优雅处理的错误.当main函数中第一次panic触发时, 程序退出而不触及其余代码.如果希望看到程序尝试创建一个临时文件, 请注释第一个panic.请注意. 与一些使用异常处理许多错误的语言不同, Go语言习惯上尽可能使用指代错误的返回值.运行此程序将导致panic, 打印错误信息和运行协程跟踪, 并以非零状态退出.下一节将介绍Defer。

2023-05-29 20:48:55 48

原创 Go by Example: Stateful Goroutines有状态的协程

对于这种特殊情况, 基于协程的方法比基于互斥锁的方法更复杂一点. 但是, 在某些情况下它可能是有用的, 例如当涉及到其他通道时, 或者当管理多个这样的互斥锁容易出错时.你应该使用感觉最自然的方法, 特别是在理解程序的正确性方面.在前面的例子中, 我们使用了带有互斥锁的显式锁来同步跨多个协程共享状态的访问.另一种选择是使用协程和通道的内置同步特性来实现相同的效果.这种基于通道的方法符合Go语言的思想,即通过通信共享内存, 并使每个数据块由一个协程拥有.下一节将介绍: 排序。

2023-05-29 14:50:00 70

原创 Go by Example: Sorting 排序

运行我们的程序打印排序后的字符串和int切片, 并将其作为AreSorted测试的结果返回true。Go的sort标准库包实现了内置的排序方法和用户自定义类型. 我们先来看看内置的排序方法.下一节将介绍: 用函数排序。

2023-05-29 14:48:57 46

原创 Go by Example: Mutexes 互斥锁

在之前的示例中, 我们看到了如何使用原子操作来管理简单的计数器状态. 对于复杂的状态, 我们可以使用互斥锁跨多个协程安全地访问数据.接下来, 我们将研究如何仅仅使用协程和通道来实现相同的状态管理任务.运行程序显示计数器按预期进行了更新.

2023-05-29 14:42:08 51

原创 Go by Example: Atomic Counters原子计数器

Go中管理状态的主要机制式通过channel通信.我们以worker pool为例可以看到这一点. 不过, 还有其他一些管理状态的选项. 在这里, 我们将看看如何使用sync/atomic包来处理多个goroutine访问的原子计数器.我们预期会进行50000次操作. 如果我们使用非原子的ops++来增加计数器, 我们可能会得到一个不一样的数字, 在每次运行时都会有所变化, 因为协程会互相干扰.此外,当使用-race标志运行时, 我们将会遇到数据竞争失败.

2023-05-29 14:41:48 68

原创 Go by Example: Rate Limiting速率控制

速率控制式控制资源和保持服务质量的重要机制.Go优雅地支持用goroutine, channel和tickers实现速率限制.对于第二批请求, 由于突发速率的限制,我们立即服务了前3个请求, 然后服务其余2个请求, 每个请求延迟约200ms.运行我们的程序, 我们看到第一批请求按预期每200毫秒处理一次.下一节将介绍: 原子计数器.

2023-05-29 14:40:16 76

原创 Go by Example: WaitGroups

为了等待多个goroutine完成, 我们可以使用WaitGroup.对于每次调用, worker协程的启动和结束顺序可能不一样.下一节将介绍: Rate Limiting速率控制.

2023-05-29 09:52:09 50

原创 Go by Example: Worker Pools

我们正在运行的程序展示了由不同工人执行的5个jobs.该程序只需要大约2秒, 尽管完成了大约5秒的总工作, 因为有3个worker在并发操作。在这个例子中, 我们将看看如何使用goroutine和channel实现一个工作池(worker pool).下一节将介绍: WaitGroups。

2023-05-29 09:52:00 54

原创 Go by Example: Tickers

Timers是为你将来想做某事的时候准备的–tickers是为你想定期重复做某事的时候准备的.这里有一个ticker的例子, 它会周期性地tick, 直到我们停止它.当我们运行这个程序时, 在我们停止它之前, 它应该tick3次.下一节将介绍: Worker Pools.

2023-05-29 09:51:51 50

原创 Go by Example: Timers定时器

我们经常希望在将来的某个时间点执行Go代码, 或者在某个时间间隔后重复执行.Go内置的timer和ticker功能使这两像任务变得很容易实现.这节我们先看一下timer, 然后在下一节看一下ticker.第一个计数器将在我们启动程序后启动2s, 但第二个计时器应该在它有机会启动之前停止.下一讲将介绍Tickers。

2023-05-28 22:14:00 51

原创 Go by Example: Range over Channels通道上的range操作

在上一篇的示例中, 我们看到了for和range操作如何提供对数据结构的迭代.我们还可以使用该语法从通道接收的值.此实例还展示了关闭非空通道但仍然可以接收剩余值的可能性.下一节将介绍: Timers定时器。

2023-05-28 22:13:50 43

原创 Go by Example: Closing Channels关闭通道

关闭通道表示不再在该通道上发送任何值. 这对于将完成通信发送给通道的接收方非常有用.已关闭的通道概念自然会引出我们的下一个示例: 通道上的range操作.

2023-05-28 22:13:39 50

原创 翻译:开源软件的架构(volume2): 可伸缩web框架及分布式系统

开源软件已经成为构建一些超大型网站的基础组成部分了.随着这些网站的成长, 围绕着它们软件架构的最佳实践与指导思想开始涌现.本文尝试去阐述设计大型网站时的需要考虑一些关键问题, 以及用于实现这些目标的基础组件.本文主要关注web系统,尽管其中一些内容也适用于其他的分布式系统.

2023-05-28 21:21:20 322

原创 UNIX环境高级编程 第2章 UNIX标准化及实现

ANSI C标准化的意图是提供C程序的可移植性, 使其能适合于大量不同的操作系统, 而不只是UNIX. 此标准不仅定义了C程序设计语言的语法和语义, 也定义了其标准库.

2023-05-28 15:43:17 370

原创 unix环境高级编程 第一章 UNIX基础知识 Go实现代码

UNIX则不同, 它只提供一个系统调用, 该系统调用返回国际标准时间1970年1月1日0点以来所经过的秒数.对该值的任何解释, 如将其变换为人们可读的, 使用本地时区的时间和日期, 都留给用户进程进行. 在标准c库中, 提供了若干函数来处理大多数情况. 这些库函数处理各种细节, 例如各种夏令时算法.时钟时间又称为墙上时间(wall clock time). 它是进程运行的时间总量, 其值与系统中同时运行的进程数有关. 在我们报告时钟时间时, 都是在系统中没有其他活动时进行度量的.

2023-05-28 15:16:02 464

原创 Go by Example: Select选路

Go的select操作允许您等待多个channel操作.将gotoutine, channel与select结合起来是Go的一个强大功能.注意, 总执行时间只有2秒,因为1秒和2秒休眠是同时执行的.我们如预期一样收到值’one’然后是’two’.下一节将介绍: Timeouts超时器。

2023-05-28 10:25:39 27

原创 Go by Example: 非阻塞通道操作

通道上的基本发送和接收时阻塞的操作.然而, 我们可以使用带有default子句的select来实现非阻塞发送,接收甚至非阻塞多路select操作.下一节将介绍: 关闭channel.

2023-05-28 10:24:47 43

原创 Go by Examples: Timeouts超时控制

对于连接到外部资源或需要限制执行时间的程序来说, 超时非常重要.由于channel和select的存在,在Go中实现超时是简单而优雅的.运行此程序显示第一个操作超时, 第二个操作成功.下一节将介绍: 非阻塞通道操作。

2023-05-28 10:24:35 22

原创 啊哈算法 第2章 第1节 队列 实现 in GO

如果使用结构体代替其中内容, 则是如下的代码。

2023-05-28 10:23:55 27

原创 啊哈算法 第3节 快速排序算法 Go实现

对于数字序列’6 1 2 7 9 3 4 5 10 8’两端开始检测.先从右往左找到第一个小于6的数, 再从左往右找到第一个大于6的数, 然后交换他们.如果计算机每秒可以做10亿次计算, 那么对1亿个数进行排序, 桶排序只需要0.1,秒, 而冒泡排序需要1千万秒, 达到115天之久.接下来介绍的快速排序, 找到一个基准数, 这是一个用来做参考的数.刚开始让哨兵i在数列最左边i=0, 让哨兵j在数列最右边j=10。可以用变量i和j, 成为哨兵i和哨兵j.冒泡排序的算法复杂度过高.

2023-05-27 15:19:54 34

原创 啊哈算法 第2节冒牌排序算法实现 in Go

冒泡排序从最开始的位置不断与自己的下一位进行比较, 如果顺序不对,则交换两者的位置, 然后接着与下一位进行比较, 直到从第一位比较到最后一位, 这是完整的一趟比较.之后是再从头开始进行这样一趟的比较.有多少个数字就要跑几趟, 直到所有趟数结束.

2023-05-27 13:22:20 62

原创 啊哈算法 中的算法实现 用数组进行排序

这个实现方式对于数字的出现次数进行排序很方便, 不过使用这种实现没法对名称出现的次数进行排序。书中第1节的代码实现, 使用Go语言, 将数组看作桶.

2023-05-27 12:49:29 22

原创 Spacemacs shortcut key常用快捷键操作

学习Spacemacs中,本文用于记录在IDE中常见操作在Spacemacs中的的快捷键.

2023-05-27 12:34:40 143

原创 Go by Example: Channel Directions通道方向

当使用通道作为函数参数时, 你可以指定时只发送还是只接收值.这种特性增加了程序的类型安全.下一节将介绍: Select选路。

2023-05-27 10:29:36 38

原创 Go by Exmaple: Channel Synchronization通道同步技术

我们可以使用通道来同步跨goroutine的执行.下面是一个使用阻塞接收来等待goroutine完成的示例. 当等待多个goroutine完成时, 您可能更可能使用WaitGroup.如果从这个程序中删除

2023-05-27 10:29:15 24

原创 Go by Example: Channel Buffering 有缓冲的通道

默认情况下, 通道channel是无缓冲的, 这意味着只有当相应的接收(

2023-05-27 10:27:47 26

原创 Go by Example: Channels通信

channels是连接并发goroutine的管道.你可以从一个goroutine向channel发送值, 并从另一个goroutine中接收这些值.默认情况下, 发送和接收会阻塞,直到发送方和接收方都准备好. 这个性质允许我们在程序的最后等待’ping’消息, 而不必使用其他的同步手段.当我们运行程序时, "ping"消息通过channel成功地从一个goroutine传递到另一个goroutine.下一节将介绍: Channel Buffering通道缓冲区.

2023-05-27 10:27:34 29

原创 Go by Example: Goroutines协程

当我们运行这个程序时, 我们首先看到阻塞调用的输出, 然后是两个goroutine的输出.goroutine的输出可能是交错的, 因为goroutine是由Go运行时并发运行的.接下来我们将看一下并发Go程序中goroutine的补充: channels通道.Goroutine是一个轻量级的执行线程.

2023-05-27 10:27:16 24

原创 算法第四版 Algorithms Part 1动态联通性

上图对比普通的quick-union操作和带权重的union操作, 可以看到带权重的操作对树高有所控制.Find查找操作就变成寻找两者是否拥有同样的parent节点, 如果有就是相连的.这样做调整时, 只需要将p的根节点指向q的根节点, 就可以了.不同的点只有当在数组中的项是一样的时候, 那么他们是连通的.依然使用数组, 不过将其看作一组树即一片森林的表示.一种’懒的方法’, 尽量避免计算直到不得不进行计算。校验p和q是否有相同的id。避免将更大的树放在低位。

2023-05-27 10:26:50 304

原创 Go by Example: Generics泛型

从Go1.18版本开始,Go增加了对泛型(也成为类型参数)的支持.下一讲将介绍:Errors错误。

2023-05-26 00:09:18 88

原创 Go by Example: Struct Embedding类型嵌入

Go支持嵌入结构体和接口, 以表达更无缝的类型组合. 不要与//go:embed混淆, 后者是在Go1.16+版本中引入的一个go指令,用于将文件和文件夹嵌入到应用程序二进制文件中的.下一节介绍: 泛型Generics.

2023-05-26 00:09:04 66

原创 Go by Examples: Interfaces接口

了解更多关于Go语言接口的内容.接口是方法签名的集合.

2023-05-26 00:08:51 30

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除