-
Go语言错误处理策略
所属栏目:[大数据] 日期:2020-12-16 热度:93
有一些函数总是成功返回的,比如,strings.Contains 和 strconv.FormatBool 对所有可能的参数变量都有定义好的返回结果,不会调用失败——尽管还有灾难性的和不可预知的场景,像内存耗尽,这类错误的表现和起因相差甚远而且恢复的希望也很渺茫。 其他的函数只[详细]
-
示例:聊天机器人
所属栏目:[大数据] 日期:2020-12-16 热度:118
结合咱们之前的学习,本节带领大家来编写一个聊天机器人的雏形,下面的代码中展示了一个简单的聊天程序。 package mainimport ( "bufio" "fmt" "os" "strings")func main() { // 准备从标准输入读取数据。 inputReader := bufio.NewReader(os.Stdin) fmt.Prin[详细]
-
Go语言找出重复行
所属栏目:[大数据] 日期:2020-12-16 热度:115
用于文件复制、打[详细]
-
Go语言函数的多返回值
所属栏目:[大数据] 日期:2020-12-16 热度:81
在Go语言中一个函数能够返回不止一个结果,我们之前已经见过标准包内的许多函数返回两个值,一个期望得到的计算结果与一个错误值,或者一个表示函数调用是否成功的布尔值,下面来看看怎样写一个这样的函数。 下面程序中的 findLinks 函数可以自己发送 HTTP 请[详细]
-
Go语言嵌入类型
所属栏目:[大数据] 日期:2020-12-16 热度:159
Go语言允许用户扩展或者修改已有的类型,这个功能对代码复用很重要,在修改已有类型以符合新类型的时候也很重要。这个功能是通过嵌入类型(type embedding)完成的。嵌入类型是将已有的类型直接声明在新的结构类型里。被嵌入的类型被称为新的外部类型的内部类[详细]
-
Go语言冒泡排序
所属栏目:[大数据] 日期:2020-12-16 热度:147
冒泡排序法是一种最简单的交换类排序方法,它是通过相邻数据的交换逐步将无序列表排列为有序列表。 冒泡排序的基本原理是重复地循环遍历要排序的元素列,依次比较两个相邻的元素,如果顺序(如从小到大或者首字母从 Z 到 A)错误就把两个元素的位置交换过来,[详细]
-
Go语言通过内存缓存来提升性能
所属栏目:[大数据] 日期:2020-12-16 热度:126
前面我们介绍了递归函数,递归函数的缺点就是比较消耗内存,而且效率比较低,那么我们要怎样提高程序的执行效率呢? 当在进行大量计算的时候,提升性能最直接有效的一种方式是避免重复计算,通过在内存中缓存并重复利用缓存从而避免重复执行相同计算的方式称[详细]
-
Go语言接口内部实现
所属栏目:[大数据] 日期:2020-12-16 热度:136
前几节我们介绍了接口的基本概念和用法,定义接口只需简单声明一个方法集合即可,定义新类型时不需要显式地声明要实现的接口,接口的使用也很简单。 那么接口的底层是如何实现的呢?如何实现动态调用的呢?接口的动态调用到底有多大的额外开销?本节我们就来[详细]
-
Go语言定时器实现原理及作用
所属栏目:[大数据] 日期:2020-12-16 热度:161
对于任何一个正在运行的应用,如何获取准确的绝对时间都非常重要,但是在一个分布式系统中我们很难保证各个节点上绝对时间的一致性,哪怕通过 NTP 这种标准的对时协议也只能把时间的误差控制在毫秒级,所以相对时间在一个分布式系统中显得更为重要,在接下来[详细]
-
Go语言生成二维码
所属栏目:[大数据] 日期:2020-12-16 热度:190
二维码作为一种快速的输入手段越来越流行,支付,添加好友,买东西,扫个二维码即可,可以说二维码已经深深地融入了我们的生活中。那么二维码是如何制作生成的呢?我们如何制作自己的二维码呢? 什么是二维码? 二维条码是指在一维条码的基础上扩展出另一维具[详细]
-
Go语言事件系统实现事件的晌应和处理
所属栏目:[大数据] 日期:2020-12-16 热度:56
Go语言可以将类型的方法与普通函数视为一个概念,从而简化方法和函数混合作为回调类型时的复杂性。这个特性和 C# 中的代理(delegate)类似,调用者无须关心谁来支持调用,系统会自动处理是否调用普通函数或类型的方法。 本节中,首先将用简单的例子了解 Go[详细]
-
Go语言make和new关键字的区别及实现原理
所属栏目:[大数据] 日期:2020-12-16 热度:98
Go语言中 new 和 make 是两个内置函数,主要用来创建并分配类型的内存。在我们定义变量的时候,可能会觉得有点迷惑,不知道应该使用哪个函数来声明变量,其实他们的规则很简单,new 只分配内存,而 make 只能用于 slice、map 和 channel 的初始化,下面我们就[详细]
-
Go语言将结构体数据保存为JSON格式数据
所属栏目:[大数据] 日期:2020-12-16 热度:78
JSON 格式是一种对象文本格式,是当前互联网最常用的信息交换格式之一。在Go语言中,可以使用 json.Marshal() 函数将结构体格式的数据格式化为 JSON 格式。 想要使用 json.Marshal() 函数需要我们先引入 encoding/json 包,示例代码如下: package mainimport[详细]
-
Go语言Context(上下文)
所属栏目:[大数据] 日期:2020-12-16 热度:160
Context 在 Go1.7 之后就加入到了Go语言标准库中,准确说它是 Goroutine 的上下文,包含 Goroutine 的运行状态、环境、现场等信息。 随着 Context 包的引入,标准库中很多接口因此加上了 Context 参数,例如 database/sql 包,Context 几乎成为了并发控制和超[详细]
-
Go语言单例模式简述
所属栏目:[大数据] 日期:2020-12-16 热度:58
设计模式的重要性不用多说,也是面试时常常会被问到的问题。对于设计模式,更多的则是仁者见仁智者见智,要在实际工作中不断的积累,再进行深度的思考,才能逐渐形成的一种思维。 单例模式也叫单子模式,是常用的模式之一,在它的核心结构中只包含一个被称为[详细]
-
Go语言词频统计
所属栏目:[大数据] 日期:2020-12-16 热度:154
从数据挖掘到语言学习本身,文本分析功能的应用非常广泛,本一节我们来分析一个例子,它是文本分析最基本的一种形式:统计出一个文件里单词出现的频率。 示例中频率统计后的结果以两种不同的方式显示,一种是将单词按照字母顺序把单词和频率排列出来,另一种[详细]
-
Go语言使用图像包制作GIF动画
所属栏目:[大数据] 日期:2020-12-16 热度:110
本节将通过示例来介绍一下Go语言标准库中图像包的使用,并使用这些图像包来创建一系列的位图图像,然后将位图序列编码为 GIF 动画。 下面的图像叫作利萨茹图形,它类似于 20 世纪 60 年代科幻片中出现的一种纤维状视觉效果,利萨茹图形是由在互相垂直的方向上[详细]
-
Go语言封装qsort快速排序函数
所属栏目:[大数据] 日期:2020-12-16 热度:56
快速排序(Quick Sort)是由“东尼·霍尔”所设计的一种排序算法。在平均状况下,排序 n 个项目要 Ο(n log n)? 次比较,在最坏状况下则需要 Ο(n2)? 次比较,但这种状况并不常见。 事实上,快速排序通常明显比其他 Ο(n log n)? 算法更快,因为它的内部循环[详细]
-
Go语言实现有限状态机(FSM)
所属栏目:[大数据] 日期:2020-12-16 热度:137
有限状态机又简称 FSM(Finite-State Machine 的首字母缩写),也可以称为有限状态自动机。它是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型。有限状态机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的[详细]
-
Go语言二叉树数据结构的应用
所属栏目:[大数据] 日期:2020-12-16 热度:52
树型结构(Tree)是一种重要的非线性数据结构,它为计算机应用中出现的具有层次关系的数据提供了一种有效的表示方法,比如文件目录结构、源程序语法结构等。 树的定义和基本术语 树是 n(n=0) 个节点的有限集合 T。在任意一棵非空树中满足如下两个条件: 有且[详细]
-
Go语言Socket编程详解
所属栏目:[大数据] 日期:2020-12-16 热度:98
大部分底层网络的编程都离不开 socket 编程,HTTP 编程、Web 开发、IM 通信、视频流传输的底层都是 socket 编程。 什么是 Socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个 socket。 建立网络通信连接至少要一对端口号[详细]
-
Go语言(Pingo)插件化开发
所属栏目:[大数据] 日期:2020-12-16 热度:124
Pingo 是一个用来为Go语言程序编写插件的简单独立库,因为 Go 本身是静态链接的,因此所有插件都以外部进程方式存在。Pingo 旨在简化标准 RPC 包,支持 TCP 和 Unix 套接字作为通讯协议。当前还不支持远程插件,如果有需要,远程插件很快会提供。 使用 Pingo[详细]
-
Go语言实现二分查找算法
所属栏目:[大数据] 日期:2020-12-16 热度:96
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找算法的前提是传入的序列是有序的(降序或升序),并且有一个目标值。 二分查找的核心思想是将 n 个元素分成大致相等的两部分,取中间值 a[n/2] 与 x 做比较,如果 x=a[n/2[详细]
-
Go语言Dial()函数:建立网络连接
所属栏目:[大数据] 日期:2020-12-16 热度:71
Go语言中 Dial() 函数用于创建网络连接,函数原型如下: func Dial(network,address string) (Conn,error) { var d Dialer return d.Dial(network,address)} 参数说明如下: network 参数表示传入的网络协议(比如 tcp、udp 等); address 参数表示传入的 IP[详细]
-
Go语言ICMP协议:向主机发送消息
所属栏目:[大数据] 日期:2020-12-16 热度:140
ICMP 是用来对网络状况进行反馈的协议,可以用来侦测网络状态或检测网络错误。 ICMP 协议介绍 ICMP(Internet Control Message Protocol)因特网控制报文协议。它是 IPv4 协议族中的一个子协议,用于 IP 主机、路由器之间传递控制消息。控制消息是网络是否畅[详细]
