![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go语言
Ryan_yan1
这个作者很懒,什么都没留下…
展开
-
解决windows使用go get报环境变量错误问题
初次使用golang语言下载引用其他模块,使用go get 命令总是报错,发现在国内需要使用需要访问外网,然而在国内是访问不了的!原因是缺少golang.org/x/net 的依赖包,GitHub已经有托管依赖包,安装下载其依赖包就能解决了:#%GOPATH%---是安装go时设置的变量名称,GOPATH路径mkdir -p %GOPATH%\src\golang.org\x cd %GOPATH%\src\golang.org\x git clone https://github.com/gol原创 2020-06-30 20:22:22 · 508 阅读 · 0 评论 -
go语言Context标准库
在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。为什么需要Context基本示例pack原创 2020-06-23 22:27:45 · 150 阅读 · 0 评论 -
Go语言的依赖管理及如何使用
Go语言的依赖管理随着版本的更迭正逐渐完善起来。依赖管理为什么需要依赖管理最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?godepGo语言从v1.5开始开始引入vendor模式,如果项目目录下有vendor目录,那么go工具链会优先使用vendor内的包进行编译、测试等。godep是一个通过vender模式实现的Go语言的第三方依赖管理工具,类似的还有由社区维护准官方包管原创 2020-06-23 21:23:13 · 876 阅读 · 0 评论 -
NSQ分布式消息队列
NSQ是目前比较流行的一个分布式的消息队列,本文主要介绍了NSQ及Go语言如何操作NSQ。NSQNSQ介绍NSQ是Go语言编写的一个开源的实时分布式内存消息队列,其性能十分优异。 NSQ的优势有以下优势:NSQ提倡分布式和分散的拓扑,没有单点故障,支持容错和高可用性,并提供可靠的消息交付保证NSQ支持横向扩展,没有任何集中式代理。NSQ易于配置和部署,并且内置了管理界面。NSQ的应用场景通常来说,消息队列都适用以下场景。异步处理参照下图利用消息队列把业务流程中的非关键流程异步化,从而原创 2020-06-22 22:46:37 · 1433 阅读 · 0 评论 -
go语言操作redis
在项目开发中redis的使用也比较频繁,本文介绍了Go语言中go-redis库的基本使用。Redis介绍Redis是一个开源的内存数据库,Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。Redis支持的数据结构Redis支持诸如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)、带范围查原创 2020-06-22 21:58:18 · 340 阅读 · 0 评论 -
go语言操作mysql数据库
MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。Go操作MySQL连接Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用database/sql包时必须注入(至少)一个数据库驱动。我们常用的数据库基本上都有完整的第三方实现。例如:MySQL驱动下载依赖go get -u github.com/go-sql-driver/mysql使用MySQL驱动func Open(driverName, dat原创 2020-06-22 20:51:49 · 377 阅读 · 0 评论 -
go语言标准库之flag
Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。os.Args如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。package mainimport ( "fmt" "os")//os.Args demofunc main() { //os.Args是一个[]string if len(os.Args) > 0 { for index, arg := range os.Args {原创 2020-06-21 17:57:24 · 229 阅读 · 0 评论 -
go语言单元测试
不写测试的开发不是好程序员。我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分。 这篇文章主要介绍下在Go语言中如何做单元测试和基准测试。go test工具Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go原创 2020-06-21 17:31:52 · 213 阅读 · 0 评论 -
go语言之net/htttp包
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。net/http介绍Go语言内置的net/http包提供了HTTP客户端和服务端的实现。HTTP协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。package mainimport ( "io/ioutil" "net/http"原创 2020-06-21 16:10:59 · 242 阅读 · 0 评论 -
go语言之网络编程
现在我们几乎每天都在使用互联网,我们前面已经学习了如何编写Go语言程序,但是如何才能让我们的程序通过网络互相通信呢?本章我们就一起来学习下Go语言中的网络编程。 关于网络编程其实是一个很庞大的领域,本文只是简单的演示了如何使用net包进行TCP和UDP通信。如需了解更详细的网络编程请自行检索和阅读专业资料。互联网协议介绍互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这原创 2020-06-21 12:30:02 · 276 阅读 · 0 评论 -
Go语言中的并发编程
并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因。Go语言中的并发编程并发与并行并发:同一时间段内执行多个任务(你在用微信和两个女朋友聊天)。并行:同一时刻执行多个任务(你和你朋友都在用微信和女朋友聊天)。Go语言的并发通过goroutine实现。goroutine类似于线程,属于用户态的线程,我们可以根据需要创建成千上万个goroutine并发工作。goroutine是由Go语言的运行时(runtime)调度完成,而线程是由操作系统调度完成。原创 2020-06-11 21:02:17 · 235 阅读 · 0 评论 -
go语言内置包之strconv
Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换。strconv包strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi()、Itia()、parse系列、format系列、append系列。更多函数请查看官方文档。string与int类型转换这一组函数是我们平时编程中用的最多的。Atoi()Atoi()函数用于将字符串类型的整数转换为int类型,函数签名如下。func Atoi(s string) (i int, err error)原创 2020-06-08 20:22:49 · 344 阅读 · 0 评论 -
go语言反射
变量的内在机制Go语言中的变量是分为两部分的:类型信息:预先定义好的元信息。值信息:程序运行过程中可动态变化的。反射介绍反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。Go程序在运行期使原创 2020-06-07 21:48:03 · 84 阅读 · 0 评论 -
go语言时间time包常用方法
时间和日期是我们编程中经常会用到的,本文主要介绍了Go语言内置的time包的基本用法。time包time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。时间类型time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。示例代码如下:func timeDemo() { now := time.Now() //获取当前时间 fmt.Printf("current time:%v\n", now) year := no原创 2020-06-04 22:46:47 · 1119 阅读 · 0 评论 -
go语言读文件写文件
文件是什么?计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。打开和关闭文件os.Open()函数能够打开一个文件,返回一个*File和一个err。对得到的文件实例调用close()方法能够关闭文件。package mainimport ( "fmt" "os")func main() { // 只读方式打开当前目录下的main.go文件 file, err := os.Open("./main.go") if err != nil {原创 2020-06-04 22:02:17 · 460 阅读 · 0 评论 -
Go语言的包(package)
在工程化的Go语言开发项目中,Go语言的源码复用是建立在包(package)基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。Go语言的包(package)包介绍包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。定义包我们还可以根据自己的需要创建自己的包。一个包可以简单理解为一个存放.go文件的文件夹。 该文件夹下面的所有go文件都要在代码的第一行添加如下代码,声明该文件归属的包。package原创 2020-06-04 20:43:49 · 317 阅读 · 0 评论 -
go语言基础之接口
接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。(接口是一种类型)接口接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型。原创 2020-06-04 20:26:43 · 250 阅读 · 0 评论 -
go语言结构体
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。类型别名和自定义类型自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如://将MyInt定义为int类型type MyInt int通过type关键字的定义,MyInt原创 2020-06-03 21:21:47 · 112 阅读 · 0 评论 -
Go语言fmt.Printf使用指南
fmt标准库是我们在学习Go语言过程中接触最早最频繁的一个了,本文介绍了fmtb包的一些常用函数。fmtfmt包实现了类似C语言printf和scanf的格式化I/O。主要分为向外输出内容和获取输入内容两大部分。向外输出标准库fmt提供了以下几种输出相关函数。PrintPrint系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容,Printf函数支持格式化输出字符串,Println函数会在输出内容的结尾添加一个换行符。func Print(a ...interface{}原创 2020-06-01 22:13:49 · 1140 阅读 · 0 评论 -
go语言函数
函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。函数Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。函数内部没有办法声明带名字的函数。里面可以声明匿名函数函数定义Go语言中定义函数使用func关键字,具体格式如下:func 函数名(参数)(返回值){ 函数体}其中:函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。参数:参数由参数变量和参数原创 2020-06-01 21:31:57 · 191 阅读 · 0 评论 -
go语言之map
Go语言中提供的映射关系容器为map,其内部使用散列表(hash)实现。补充:go语言内置包中文文档https://studygolang.com/pkgdocmapmap是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。map定义Go语言中 map的定义语法如下:map[KeyType]ValueType其中,KeyType:表示键的类型。ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用make(原创 2020-05-31 18:42:56 · 124 阅读 · 0 评论 -
go语言切片和指针,make与new函数
引子因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。 例如:func arraySum(x [3]int) int{ sum := 0 for _, v := range x{ sum = sum + v } return sum}这个求和函数只能接受[3]int类型,其他的都不支持。 再比如,a := [3]int{1, 2, 3}数组a中已经有三个元素了,我们不能再继续往数组a中添加新元素了。切片切片(Sli原创 2020-05-31 13:48:19 · 1210 阅读 · 0 评论 -
go语言Array数组
Array(数组)数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:// 定义一个长度为3元素类型为int的数组avar a [3]int数组定义:var 数组变量名 [元素数量]T比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int和[10]int是不同的类型。var a [3]intvar b [4]inta = b // 不可以这样做,因原创 2020-05-30 19:55:48 · 445 阅读 · 0 评论 -
go语言运算符
运算符Go 语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符算数运算符运算符描述+相加-相减*相乘/相除%求余注意: ++(自增)和--(自减)在Go语言中是单独的语句,并不是运算符。关系运算符运算符描述==检查两个值是否相等,如果相等返回 True 否则返回 False。!=检查两个值是否不相等,如果不相等返回 True 否则返回 False。>检查左边值是否原创 2020-05-30 15:26:21 · 165 阅读 · 0 评论 -
go语言流程控制,if判断,for循环
流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”。Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。if else(分支结构)if条件判断基本写法Go语言中if条件判断的格式如下:if 表达式1 { 分支1} else if 表达式2 { 分支2} else{ 分支3}当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行原创 2020-05-30 15:08:58 · 664 阅读 · 0 评论 -
go语言标识符及关键字,常量和变量
标识符与关键字标识符在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。关键字关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。Go语言中有25个关键字: break default func interface select case原创 2020-05-30 14:08:16 · 166 阅读 · 0 评论 -
go语言基本数据类型
Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函数、map、通道(channel)等。Go 语言的基本类型和其他语言大同小异。基本数据类型整型整型分为以下两个大类: 按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。类型描述uint8无符原创 2020-05-30 14:06:53 · 219 阅读 · 0 评论 -
Go语言安装及环境配置
最新1.14版本,一步一步,从零搭建Go语言开发环境。因为Go语言及相关编辑工具的更新迭代,本文已于2020/03/25更新,可能会和视频有所出入,请以更新后的本文为准。安装Go语言及搭建Go语言开发环境注意:Go语言1.14版本之后推荐使用go modules管理以来,也不再需要把代码写在GOPATH目录下了,之前旧版本的教程戳这个链接。下载下载地址Go官网下载地址:https://golang.org/dl/Go官方镜像站(推荐):https://golang.google.cn/dl/原创 2020-05-28 20:33:42 · 1091 阅读 · 0 评论