-
go语言中结构struct
所属栏目:[大数据] 日期:2020-12-16 热度:138
package main;import "fmt"//结构struct//定义Person结构type Person struct {name string;age int;};//结构里面还有一个匿名结构type Person2 struct {name string;age int;contact struct {phone string;addr string;}}//结构里的匿名字段type Person3 str[详细]
-
Go语言网络爬虫概述
所属栏目:[大数据] 日期:2020-12-16 热度:66
简单来说,网络爬虫是互联网终端用户的模仿者。它模仿的主要对象有两个,一个是坐在计算器前使用网络浏览器访问网络内容的人类用户,另一个就是网络浏览器。 网络爬虫会模仿人类用户输入某个网站的网络地址,并试图访问该网站上的内容,还会模仿网络浏览器根[详细]
-
Go语言竞态检测——检测代码在并发环境下可能出现的问题
所属栏目:[大数据] 日期:2020-12-16 热度:56
Go语言程序可以使用通道进行多个 goroutine 间的数据交换,但这仅仅是数据同步中的一种方法。通道内部的实现依然使用了各种锁,因此优雅代码的代价是性能。在某些轻量级的场合,原子访问(atomic包)、互斥锁(sync.Mutex)以及等待组(sync.WaitGroup)能最[详细]
-
安装Go语言开发包
所属栏目:[大数据] 日期:2020-12-16 热度:143
要学 Go 语言,首先要学会 Go 语言开发包的安装和使用。Go语言的开发包可以在以下站点下载: Golang 中国,网址为:https://www.golangtc.com/download Go 语言官方网站,网址为:https://golang.org/dl/ 下面是 golang.org 官方网站 1.10.3 版本的下载列表。[详细]
-
Go语言fmt.Sprintf(格式化输出)
所属栏目:[大数据] 日期:2020-12-16 热度:79
格式化在逻辑中非常常用。使用格式化函数,要注意写法: fmt.Sprintf(格式化样式,参数列表…) 格式化样式:字符串形式,格式化动词以 % 开头。 参数列表:多个参数以逗号分隔,个数必须与格式化样式中的个数一一对应,否则运行时会报错。 在 Go 语言中,格式[详细]
-
Go语言修改字符串
所属栏目:[大数据] 日期:2020-12-16 热度:120
Go 语言的字符串无法直接修改每一个字符元素,只能通过重新构造新的字符串并赋值给原来的字符串变量实现。请参考下面的代码: angel := "Heros never die"angleBytes := []byte(angel)for i := 5; i = 10; i++ { angleBytes[i] = ' '}fmt.Println(string(angl[详细]
-
Go语言如何搭建网站程序
所属栏目:[大数据] 日期:2020-12-16 热度:164
本节我们来学习如何搭建一个简单的网站程序。 首先打开你最喜爱的编辑器,编写如下所示的几行代码,并将其保存为 hello.go。 package mainimport ( "io" "log" "net/http")func helloHandler(w http.ResponseWriter,r *http.Request) { io.WriteString(w,"Hel[详细]
-
Go语言字符串截取(获取字符串的某一段字符)
所属栏目:[大数据] 日期:2020-12-16 热度:71
获取字符串的某一段字符是开发中常见的操作,我们一般将字符串中的某一段字符称做 子串(substring) 。 下面例子中使用 strings.Index() 函数在字符串中搜索另外一个子串,代码如下: tracer := "死神来了,死神bye bye"comma := strings.Index(tracer,",")po[详细]
-
Go语言Telnet回音服务器——TCP服务器的基本结构
所属栏目:[大数据] 日期:2020-12-16 热度:181
Telnet 协议是 TCP/IP 协议族中的一种。它允许用户(Telnet 客户端)通过一个协商过程与一个远程设备进行通信。本例将使用一部分 Telnet 协议与服务器进行通信。 服务器的网络库为了完整展示自己的代码实现了完整的收发过程,一般比较倾向于使用发送任意封包[详细]
-
Go语言获取结构体字段标识
所属栏目:[大数据] 日期:2020-12-16 热度:154
在本节,我们将看到如何通过反射机制类获取成员标签。 对于一个 web 服务,大部分 HTTP 处理函数要做的第一件事情就是展开请求中的参数到本地变量中。我们定义了一个工具函数,叫 params.Unpack,通过使用结构体成员标签机制来让 HTTP 处理函数解析请求参数更[详细]
-
Go语言字符串拼接(连接)
所属栏目:[大数据] 日期:2020-12-16 热度:134
连接字符串这么简单,还需要学吗?确实,Go 语言和大多数其他语言一样,使用 + 对字符串进行连接操作,非常直观。 但问题来了,好的事物并非完美,简单的东西未必高效。除了加号连接字符串,Go 语言中也有类似于 StringBuilder 的机制来进行高效的字符串连接[详细]
-
使用Docker Compose部署应用(详解版)
所属栏目:[大数据] 日期:2020-12-16 热度:140
下面为大家介绍一下如何使用 Docker Compose 部署多容器的应用。 Docker Compose 与 Docker Stack 非常类似。它能够在 Docker 节点上,以单引擎模式(Single-Engine Mode)进行多容器应用的部署和管理。 多数的现代应用通过多个更小的服务互相协同来组成一个[详细]
-
Go语言遍历字符串——获取每一个字符串元素
所属栏目:[大数据] 日期:2020-12-16 热度:196
遍历字符串有下面两种写法。 遍历每一个ASCII字符 遍历 ASCII 字符使用 for 的数值循环进行遍历,直接取每个字符串的下标获取 ASCII 字符,如下面的例子所示。 theme := "狙击 start"for i := 0; i len(theme); i++ { fmt.Printf("ascii: %c %dn",theme[i],t[详细]
-
Go语言Writer和Reader接口简述
所属栏目:[大数据] 日期:2020-12-16 热度:137
Go语言中 io 包是围绕着实现了 io.Writer 和 io.Reader 接口类型的值而构建的。由于 io.Writer 和 io.Reader 提供了足够的抽象,这些 io 包里的函数和方法并不知道数据的类型,也不知道这些数据在物理上是如何读和写的。让我们先来看一下 io.Writer 接口的声[详细]
-
Go语言开发一个简单的相册网站
所属栏目:[大数据] 日期:2020-12-16 热度:158
本节我们将综合之前介绍的网站开发相关知识,一步步介绍如何开发一个虽然简单但五脏俱全的相册网站。 新建工程 首先创建一个用于存放工程源代码的目录并切换到该目录中去,随后创建一个名为 photoweb.go 的文件,用于后面编辑我们的代码: $ mkdir -p photowe[详细]
-
Go语言通道的多路复用——同时处理接收和发送多个通道的数据
所属栏目:[大数据] 日期:2020-12-16 热度:177
多路复用是通信和网络中的一个专业术语。多路复用通常表示在一个信道上传输多路信号或数据流的过程和技术。 提示 报话机同一时刻只能有一边进行收或者发的单边通信,报话机需要遵守的通信流程如下: 说话方在完成时需要补上一句“完毕”,随后放开通话按钮,[详细]
-
Go语言Base64编码——电子邮件的基础编码格式
所属栏目:[大数据] 日期:2020-12-16 热度:58
Base64 编码是常见的对 8 比特字节码的编码方式之一。Base64 可以使用 64 个可打印字符来表示二进制数据,电子邮件就是使用这种编码。 Go 语言的标准库自带了 Base64 编码算法,通过几行代码就可以对数据进行编码,示例代码如下。 package mainimport ( "enco[详细]
-
Go语言计算字符串长度——len()和RuneCountInString()
所属栏目:[大数据] 日期:2020-12-16 热度:134
Go 语言的内建函数 len(),可以用来获取切片、字符串、通道(channel)等的长度。下面的代码可以用 len() 来获取字符串的长度。 tip1 := "genji is a ninja"fmt.Println(len(tip1))tip2 := "忍者"fmt.Println(len(tip2)) 程序输出如下: 16 6 len() 函数的返[详细]
-
Go语言使用通道响应计时器的事件
所属栏目:[大数据] 日期:2020-12-16 热度:87
Go语言中的 time 包提供了计时器的封装。由于 Go语言中的通道和 goroutine 的设计,定时任务可以在 goroutine 中通过同步的方式完成,也可以通过在 goroutine 中异步回调完成。这里将分两种用法进行例子展示。 一段时间之后(time.After) 延迟回调: package[详细]
-
Go语言使用切片读写文件
所属栏目:[大数据] 日期:2020-12-16 热度:155
切片提供了 Go语言中处理 I/O 缓冲的标准方式,下面 cat 函数的第二版中,在一个切片缓冲内使用无限 for 循环(直到文件尾部 EOF)读取文件,并写入到标准输出(os.Stdout)。 func cat(f *os.File) { const NBUF = 512 var buf [NBUF]byte for { switch nr,e[详细]
-
Go语言使用reflect.Type显示一个类型的方法集
所属栏目:[大数据] 日期:2020-12-16 热度:73
本节通过示例来演示如何使用 reflect.Type 来打印任意值的类型和枚举它的方法: // Print prints the method set of the value x.func Print(x interface{}) { v := reflect.ValueOf(x) t := v.Type() fmt.Printf("type %sn",t) for i := 0; i v.NumMethod()[详细]
-
Go语言使用空接口实现可以保存任意值的字典
所属栏目:[大数据] 日期:2020-12-16 热度:89
空接口可以保存任何类型这个特性可以方便地用于容器的设计。下面例子使用 map 和 interface{} 实现了一个字典。字典在其他语言中的功能和 map 类似,可以将任意类型的值做成键值对保存,然后进行找回、遍历操作。详细实现代码如下所示。 package mainimport "[详细]
-
Go语言网络爬虫多重读取器的实现
所属栏目:[大数据] 日期:2020-12-16 热度:182
相比前面两节中介绍的缓冲器和缓冲池,多重读取器的实现就简单多了。首先是基本结构: //多重读取器的实现类型type myMultipleReader struct { data []byte} 非常简单和直接,多重读取器只保存要读取的实际数据。NewMultipleReader 用于新建一个多重读取器的[详细]
-
Go语言网络爬虫的接口设计
所属栏目:[大数据] 日期:2020-12-16 热度:72
这里所说的接口是指网络爬虫框架中各个模块的接口。与先前描述的基本数据结构不同,它们的主要职责是定义模块的行为。在定义行为的过程中,我会对它们应有的功能作进一步的审视,同时也会更多地思考它们之间的协作方式。 下面就开始逐一设计网络爬虫框架中的[详细]
-
Go语言网络爬虫缓冲池工具的实现
所属栏目:[大数据] 日期:2020-12-16 热度:158
缓冲池的基本结构如下: //数据缓冲池接口的实现类型type myPool struct { //缓冲器的统一容量 bufferCap uint32 //缓冲器的最大数量 maxBufferNumber uint32 //缓冲器的实际数量 bufferNumber uint32 //池中数据的总数 total uint64 //存放缓冲器的通道 bufC[详细]
