自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(259)
  • 收藏
  • 关注

原创 Go入门指南-19.10总结和优化

资源耗尽: 随着 URL 数据库的增长,内存使用可能成为一个问题。可以通过主服务器上 key 的分割(分片)来解决。删除: 为了支持删除已经缩短的 URLs , 主从服务器之间的交互将会变得更加复杂。美观: 用户界面可以更漂亮。你可以使用 Go 的 template 包实现(参见。通过逐步构建我们的 goto 应用,我们几乎遇到了 Go 的所有重要功能。断开连接,客户端应该尝试重新拨号。一个 「拨号」 协程可以解决这个问题。可靠性: 主/从 RPC 连接可以更可靠: 如果。

2024-11-09 11:05:29 192 1

原创 Go入门指南-19.9使用 ProxyStore

如果给出一个主服务器地址,我们启动一个从服务器进程,并且创建一个新的 ProxyStore;要在 Windows 下测试, 启动一个 MINGW shell 并启动主服务器,然后每一个从服务器启动一个新的 MINGW shell 并启动从服务器的进程。最终我们调整我们的 main() 函数,以便启动一个从服务器或者一个主服务器(并且我们只能这样,因为 store 现在是一个 Store 类型的接口!现在,我们可以启动一个主服务器和多个从服务器,并且对这些从服务器进行压力测试。

2024-11-09 11:04:46 326

原创 Go入门指南-19.8多台机器上的多线程

Go 的 rpc 包提供了一个通过网络连接进行函数调用的便利的方法,使 URLStore 成为一个 RPC 服务(我们已经在。目前为止, goto 作为单个进程运行,即使使用协程,在一台机器上运行的单个进程也只能提供这么多并发请求。为了使 URLStore 成为一个 RPC 服务,我们需要去修改 Put 与 Get 方法,以便它们匹配这个函数的签名。为了使我们的程序更灵活,就我们在上一章中所做的,我们可以添加一个命令行参数。现在,因为 key 和 url 是指针,我们必须在它们前面添加一个。

2024-11-09 11:03:43 435

原创 Go入门指南-19.7使用 Json 来存储

如果你是一个敏锐的测试人员,也许你已经注意到,当 goto 第 2 次启动的时候,它有短 urls 并且可以完美运行,然而从第 3 次开始,我们会收到这个错误: Error loading URLStore: extra data in buffer. This is because gob is a stream based protocol that doesn’t support restarting。),它将数据存储成纯文本,因此他也可以被 Go 以外的其他语言编写的进程读取。

2024-11-09 11:03:00 159

原创 Go入门指南-19.6使用 Goroutines 来提高性能

如果有太多的客户端试图同时添加 URLs ,第 2 版仍然存在一个性能问题: 由于锁定机制,我们的 map 可以安全的更新并发访问,但是立即将每一个新记录写入到磁盘,是一个瓶颈。这样,当启动程序的时候,如果在命令行中输入这些值,它们将被替换成新的值,如果没有输入,将从 flag 中获取默认值。我们深入的学习了协程与通道,但是在这里我们看到了一个有用的示例,它可以更好的管理一个程序的不同部分。的另一端,我们必须有一个接收器: 我们的新方法 saveLoop 将运行在一个单独的。的值( 在代码中使用的是。

2024-11-09 11:02:03 565

原创 Go入门指南-19.5数据存储: gob

我们将修改 URLStore ,用于将它的数据写入到一个文件,并且在 goto 启动的时候恢复这个数据。编译并测试第二个版本,或者简单的使用已经存在的可执行文件(译者注:别纠结为什么没有这个,就自己编译吧),并在关闭了 web 服务器之后仍然可以知道所有的短 url (你可以通过在终端窗口执行 CTRL + C 停止这个进程)。在 goto 启动的时候,我们磁盘上的数据存储必须读取到 URLStore 中,为此,我们有一个 load 方法。类型 ), 它将是一个可以用于写入和读取的打开文件的句柄。

2024-11-09 11:00:25 605

原创 Go入门指南-19.4用户界面:Web 网页前端

io.Writer() 是 Go 中的一个接口,并且我们看到,通过接口的使用,Fprintf 是非常的通用,它能写入很多不同的东西。在这种情况下,我们发送一个常量字符串 AddForm 给客户端,这实际上是创建了一个需要包含一个 form 表单的 html,form 中有一个 url 的 input 字段、一个提交按钮,当推送时将发送一个。就可以编译源码,默认会生成一个和目录名称相同的可执行文件(个人觉得 Windows 和 macOS 下应该一样,不过没有环境无法测试,请自行尝试或查看其他文档)。

2024-11-09 10:57:46 1114

原创 Go入门指南-19.3数据结构分析

中的 url 类型 (A)和(B)都是一个字符串,并且它们彼此相关: 我们可以将(B)作为键,通过它去获取(A)的值,它们相互映射。当我们的服务一次性获得需要更新类型的请求时,可能会出现以下问题: 添加操作可能被另一个相同类型的请求打断,并且长网址的值可能不会被写入。使它线程安全:我们的 URLStore 变量是一个重要的内存数据存储,在这里: 一旦我们获得一些流量,将会有许多重定向类型的请求。当我们的应用在生产环境中运行的时候,它将接收到很多短网址的请求,并且还会收到很多将一个长网址变短的请求。

2024-11-09 10:57:11 971

原创 Go入门指南-19.2UrlShortener 项目介绍

你一定知道浏览器中的一些地址(被称为 URLs)非常的长并且复杂,网络上会有一些服务将他们变成一个非常友好的短 URL,来代替他们使用。当请求短 URL 的时候,它将用户重定向到原始的、长的 RUL: 所以当你在浏览器中输入类型 B ,它将你重定向到 A 的页面。** 版本 1 — 数据结构与 web 服务器的前面部分:**(B) 并且存储这一对数据。

2024-11-09 10:56:37 145

原创 Go入门指南-19.1简介

一个短 URL web 应用,因为 web 无处不在。这个示例来自 Andrew Gerrand 的精彩演讲( 参见文献: 22)。我们将分三个阶段完成,每一个阶段会有更多的功能,并逐渐展现 Go 语言的更多特性。因为代码会频繁改变,所以不在这里打印,但是可以到。下载,并且这里包含了整个教程的所有示例和练习。版本 2 : 持久化数据,因为将它写入到了一个。译者注: 如果因为网络的原因无法打开,可以到。版本 3 : 使用协程和通道重写应用(参数。中的 web 应用中学习到的知识。版本 5: 一个使用。

2024-11-09 10:55:38 140

原创 Go入门指南-18.11出于性能考虑的最佳实践和建议

(5)如果只想获取切片中某项值,不需要值的索引,尽可能的使用。(4)尽可能的使用数组和切片代替映射(详见参考文献 15);(8)当定义一个方法时,使用指针类型作为方法的接受者;(9)在代码中使用常量或者标志提取常量的值;(10)尽可能在需要分配大量内存时使用缓存;去初始化声明一个变量(在函数内部);(6)当数组元素是稀疏的(例如有很多。(2)尽可能的使用字符代替字符串;(3)尽可能的使用切片代替数组;(7)初始化映射时指定其容量;),使用映射会降低内存消耗;(11)使用缓存模板(参考。

2024-11-07 12:05:00 228

原创 Go入门指南-18.10其他

【代码】Go入门指南-18.10其他。

2024-11-07 12:02:35 105

原创 Go入门指南-18.9网络和网页应用

【代码】Go入门指南-18.9网络和网页应用。

2024-11-07 12:01:34 134

原创 Go入门指南-18.8协程(goroutine)与通道(channel)

使用带缓存的通道可以很轻易成倍提高它的吞吐量,某些场景其性能可以提高至10倍甚至更多。通过调整通道的容量,甚至可以尝试着更进一步的优化其性能。如果使用通道传递大量单独的数据,那么通道将变成性能瓶颈。然而,将数据块打包封装成数组,在接收端解压数据时,性能可以提高至 10 倍。实践经验表明,如果你使用并行运算获得高于串行运算的效率:在协程内部已经完成的大部分工作,其开销比创建协程和协程间通信还高。(12)如何在通道中使用计时器和定时器:参考。(6)如何限制并发处理请求的数量:参考。(2)如何检测一个通道。

2024-11-07 12:00:57 443

原创 Go入门指南-18.7文件

【代码】Go入门指南-18.7文件。

2024-11-07 11:59:30 124

原创 Go入门指南-18.6. 函数

【代码】Go入门指南-18.6. 函数。

2024-11-07 11:58:55 208

原创 Go入门指南-18.5接口

(1)如何检测一个值。

2024-11-07 11:57:53 94

原创 Go入门指南-18.4结构体

通常情况下,为每个结构体定义一个构建函数,并推荐使用构建函数初始化结构体(参考。当结构体的命名以大写字母开头时,该结构体在包外可见。

2024-11-07 11:57:04 199

原创 Go入门指南-18.3映射

(2)如何在一个映射中检测键。

2024-11-07 11:56:16 125

原创 Go入门指南-18.2数组和切片

(3)如何在一个二维数组或者切片。

2024-11-07 11:55:35 129

原创 Go入门指南-18.1字符串

(6)如何解析命令行参数:使用。

2024-11-07 11:54:06 144

原创 Go入门指南-17.4操作者模式和接口

运算符是个一元或者二元函数,它返回一个新的对象并且不能修改它的参数,比如和。在 C++ 中,可以重载中缀运算符(+ 、 - 、* 等)用来支持数学类语法,但是除了一些特殊情况,Go 不支持运算符重载: 为了克服这个限制,运算符必须用函数进行模拟。

2024-11-07 11:53:17 387

原创 Go入门指南-17.3能见度模式

展示了当在单独的包定义类型时,如何强制使用工厂函数。我们看到了简单的能见度规则如何规定了在。中的类型的访问模式、变量和函数。

2024-11-07 11:52:40 123

原创 Go入门指南-17.2defer 模式

延迟调用其后的代码,确保资源能够被关闭或返回给连接池。(2) 解锁一个已加锁的资源 (a mutex):(参照 §9.3)(1) 关闭文件流:(参照 § 12.7)它也能用于不要忘了在一个报告中打印页脚。当资源不再被使用时,使用。

2024-11-07 11:51:57 127

原创 Go入门指南-17.1关于逗号 ok 模式

条件语句中,使用这种模式去检测第二个参数值会让代码显得优雅简洁。这种模式在 go 语言编码规范中非常重要。这段代码中的函数将错误返回给它的调用者,当函数执行成功时,返回的错误是。要实现简洁的错误检测代码,更好的方式是使用闭包,参考。(2)检测映射中是否存在一个键值(参考。(1)在函数返回时检测错误(参考。(3)检测一个接口类型变量。,第一个参数是一个值或者。这种模式也常用于通过。

2024-11-07 11:51:15 149

原创 Go入门指南-16.10糟糕的错误处理

依附于模式的描述和与的总结。

2024-11-06 09:37:59 299

原创 Go入门指南-16.9闭包和协程的使用

for ix := range values { // ix是索引值。// 版本B: 和A版本类似,但是通过调用闭包作为一个协程。}() // 调用闭包打印每个索引值。// 版本C: 正确的处理方式。

2024-11-06 09:37:06 411

原创 Go入门指南-16.8 误用协程和通道

使用了一些简单的算法,举例说明了协程和通道的使用,例如生产者或者迭代器。在实际应用中,你不需要并发执行,或者你不需要关注协程和通道的开销,在大多数情况下,通过栈传递参数会更有效率。去跳出一个循环,很有可能会导致内存溢出,因为协程正处理某些事情而被阻塞。在实际代码中,通常仅需写一个简单的过程式循环即可。由于教学需要和对协程的工作原理有一个直观的了解,在。

2024-11-06 09:36:19 200

原创 Go入门指南-16.7使用值类型时误用指针

将一个值类型作为一个参数传递给函数或者作为一个方法的接收者,似乎是对内存的滥用,因为值类型一直是传递拷贝。但是另一方面,值类型的内存是在栈上分配,内存分配快速且开销不大。如果你传递一个指针,而不是一个值类型,go编译器大多数情况下会认为需要创建一个对象,并将对象移动到堆上,所以会导致额外的内存分配:因此当使用指针代替值类型作为参数传递时,我们没有任何收获。

2024-11-06 09:35:33 109

原创 Go入门指南-16.6使用指针指向接口类型

(译者注:n.next未定义(*nexter类型没有next成员或next方法))个字节,并返回一个切片:这是正确做法。接口类型的指针作为参数传递给函数:当使用。函数时,系统会给出一个编译错误:*是一个接口类型,并且定义了一个。接口作为参数并读取接下来的。

2024-11-06 09:34:55 193

原创 Go入门指南-16.5不需要将一个指向切片的指针传递给函数

我们已经知道,切片实际是一个指向潜在数组的指针。我们常常需要把切片作为一个参数传递给函数是因为:实际就是传递一个指向变量的指针,在函数内可以改变这个变量,而不是传递数据的拷贝。

2024-11-06 09:34:13 119

原创 Go入门指南-16.4何时使用 new() 和 make()

【代码】Go入门指南-16.4何时使用 new() 和 make()

2024-11-06 09:33:07 100

原创 Go入门指南-16.3发生错误时使用defer关闭一个文件

但是在循环结尾处的 defer 没有执行,所以文件一直没有关闭!

2024-11-06 09:32:21 169

原创 Go入门指南-16.2误用字符串

当需要对一个字符串进行频繁的操作时,谨记在 go 语言中字符串是不可变的(类似 java 和 c#)。形式连接字符串效率低下,尤其在一个循环内部使用这种形式。这会导致大量的内存开销和拷贝。注意:由于编译优化和依赖于使用缓存操作的字符串大小,当循环次数大于15时,效率才会更佳。

2024-11-06 09:31:27 122

原创 Go入门指南-16.1误用短声明导致变量覆盖

循环中出现,尤其当函数返回一个具名变量时难于察觉。变量,并且该变量的值为。

2024-11-06 09:30:15 346

原创 Go入门指南-15.12SMTP 发送邮件

包实现了一个简单的邮件传输协议来发送邮件。按照这个示例代码,发送邮件是会被拒信的。看了下 SendMail 的源码,它要求 msg 参数要符合。设置 Mail(= 寄件人) 和 Rcpt (= 收件人)当然,也要把里面的寄件人、收件人等信息按照实际去修改一下。Dial 返回一个用于连接到 SMTP 服务器的客户端。它可以使用下面示例的格式来发送一封邮件,如果需要权限认证并且有多个收件人,可以使用。是需要连接服务器,如果可以切换到。Data 返回一个可以写入数据的。电子邮件的标准格式。

2024-11-05 17:46:42 269

原创 Go入门指南-15.11Websocket 通讯

示例 15.25 是一个客户端代码,它会在 5 秒后终止。当一个客户端与服务器端连接后,服务器端后打印: new connection;当客户端停止的时候,服务器端会打印: EOF => closing connection。协议相比,它是基于客户端与服务器端会话的持久链接,除此之外,功能几乎和。备注: Go 团队决定在 Go 1 版本中将。预计在不久的将来也会发生巨大的改变。在示例 15.24 中,是一个典型的。服务,启动它,然后监听一个来自。译者注: 现在这个包已经被放在了。

2024-11-05 17:46:05 418

原创 Go入门指南-15.10使用 netchan 跨网络实现消息传递

包实现了类型安全的网络通道: 它允许通道的两端出现在通过网络连接的不同计算机上。一个出口按照名称发布 一个(组)层级的包中是保留的不被推荐的代码,它已经从 Go 1. 中从标准库中移除。本章节为了向后兼容,只讨论下。中,通道作为一个本地通道被使用,它们只存在于执行它们的机器的内存空间中。译者注: 了解下原理就可以了,这个包已经被 Go 团队废弃。一个入口去连接出口的机器,并按照名称输入到。备注: Go 团队决定改进和修改现在版本的。不是同步的,它们就像是缓冲。密切相关的在网络上使用。

2024-11-05 17:45:22 323

原创 Go入门指南-15.9RPC 远程调用

方法的返回值要求是一个 error 类型,所以示例的 net.Error 执行会出错,因此要换成 error 类型(有可能是版本更新造成的,测试使用的 Go 版本为: go1.10.1 )。服务器注册一个对象,通过对象的类型名称暴露这个服务:注册后就可以通过网络或者其他远程客户端的 I/O 连接它的导出方法。服务器可以注册多个不同类型的对象(服务),但是相同的类型注册多个对象的时候会出错。运行的 Go 服务器,并且想以不同的用户去运行你的代码,Brad Fitz 的。,在调用完成后将分配一个新的通道。

2024-11-05 17:43:01 334

原创 Go入门指南-15.8一个多功能的精致的 WebServer

ServeHTTP 是 ctr 的 Handler 方法,因为它有一个正确的签名(译者注:ctr 实现了 ServeHTTP 方法,就实现了 Handler 接口,可以看到示例中,就不需要再通过 HandlerFunc 了,因为它自己就已经是一个 Handler 了)。下面代码片段显示了一个可以完成这个工作的。为了进一步加深你对 http 包的理解以及如何去构建一个 web 服务器的功能,学习并尝试练习下面代码:先将代码列出,它用到了的多种功能,输出会在下面说明。,这个里面包含了访问的地址和发生的时间。

2024-11-05 17:41:58 741

格兰杰因果关系效应GCCA因果分析工具(Matlab)和说明书

格兰杰因果关系检验(英语:Granger causality test)是一种假设检验的统计方法,检验一组时间序列x是否为另一组时间序列y的原因。它的基础是回归分析当中的自回归模型。回归分析通常只能得出不同 变量间的同期 相关性;自回归模型只能得出同一 变量前后期 的相关性;但诺贝尔经济学奖得主克莱夫·格兰杰(Clive Granger)于1969年论证 ,在自回归模型中透过一系列的检验进而揭示不同变量之间的时间落差相关性是可行的。 格兰杰本人在其2003年获奖演说中强调了其引用的局限性,以及“很多荒谬论文的出现”(Of course, many ridiculous papers appeared)。格兰杰因果关系检验的结论只是一种统计估计,不是真正意义上的因果关系,不能作为肯定或否定因果关系的根据。同时,格兰杰因果关系检验也有一些不足之处,如并未考虑干扰因素的影响,也未考虑时间序列间非线性的相互关系。一些基于格兰杰因果关系检验的方法一定程度上解决了这些问题。

2023-12-07

空空如也

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

TA关注的人

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