
Go
文章平均质量分 78
Cynhard85
逆水行舟不进则退
展开
-
Golang教程:(二十二)信道
原文:https://golangbot.com/channels/欢迎来到Golang系列教程的第二十二篇。在上一篇教程中,我们讨论了如何使用协程实现并发。在这篇教程中,我们将讨论信道以及如何使用信道实现协程间通信。什么是信道信道(Channel)可以被认为是协程之间通信的管道。与水流从管道的一端流向另一端一样,数据可以从信道的一端发送并在另一端接收。声明信道每个翻译 2017-07-27 09:44:39 · 6299 阅读 · 7 评论 -
Golang教程:(十二)变参函数
原文:https://golangbot.com/variadic-functions/这是本Golang系列教程的第十二篇。什么是变参函数?变参函数是指可以接受可变数量的参数的函数。语法如果一个函数的最后一个参数由 ...T 表示,则该函数可以接受任意数量的类型为 T 的参数。请注意只有函数的最后一个参数才能指定为可变参数。例子你有没有想过为什么 appe翻译 2017-07-16 08:03:14 · 4729 阅读 · 2 评论 -
Golang教程:(十一)数组和切片
原文:https://golangbot.com/arrays-and-slices/这是本Golang系列教程的第十一篇。数组数组是属于同一类型的元素的集合。例如,整数 5, 8, 9, 79, 76 的集合就构成了一个数组。Go不允许在数组中混合使用不同类型的元素(比如整数和字符串)。声明数组的类型为 n[T],其中 n 表示数组中元素的个数,T 表示数组中元素的类型。翻译 2017-07-16 08:02:21 · 14574 阅读 · 0 评论 -
Golang教程:(十)switch 语句
原文:https://golangbot.com/switch/这是本Golang系列教程的第十篇。switch 是一个条件语句,用于将一个表达式的求值结果与可能的值的列表进行匹配,并根据匹配结果执行相应的代码。可以认为 switch 语句是编写多个 if-else 子句的惯用方式。举例是说明问题最好的方式,让我们写一个简单的程序,输入手指编号,输出对应的手指名称:)。例如 0 表示拇翻译 2017-07-16 08:01:27 · 52816 阅读 · 3 评论 -
Golang教程:(九)循环语句
原文:https://golangbot.com/loops/这是本Golang系列教程的第九篇。循环语句用于重复执行代码块。for 语句是 Go 中唯一的循环语句。Go 没有提供其他语言(如 C)中的 while 和 do while 循环语句。for 语句语法for initialisation; condition; post { }初始化语句 initialis翻译 2017-07-15 08:34:36 · 20918 阅读 · 2 评论 -
Golang教程:(八)if else 语句
原文:https://golangbot.com/if-statement/这是本Golang系列教程的第八篇。if 是一个条件语句。if 语句的语法为:if condition { }如果 condition 为 true,那么就执行 { 和 } 之间的代码。与其它语言(如C)不同,即使 {} 之间只有一条语句,{} 也是必需的。if 语句后面可以接可选的 els翻译 2017-07-15 08:33:58 · 3841 阅读 · 0 评论 -
Golang教程:(七)包
原文:https://golangbot.com/packages/这是本Golang系列教程的第七篇。什么是包?为什么使用包?到目前为止我们见到的 Go 程序都只有一个文件,文件中包含了一个main函数和几个其他函数。在实际中这种将所有代码都放在一个文件里的组织方式是不可行的。这样的组织方式使得代码变得无法重用和维护困难。包(package)使这种情况转危为安。包用于组织Go源代翻译 2017-07-15 08:33:07 · 5068 阅读 · 0 评论 -
Golang教程:(六)函数
原文:https://golangbot.com/functions/这是本Golang系列教程的第六篇。函数是完成一个特定任务的代码块。一个函数接受输入,对输入进行一些运算并产生输出。函数声明在 Go 中声明一个函数的语法为:func functionname(parametername type) returntype { //function body}函翻译 2017-07-15 08:32:08 · 3258 阅读 · 0 评论 -
Golang教程:(五)常量
原文:https://golangbot.com/constants/这是本Golang系列教程的第五篇。定义常量在Go中常量(constant)用来表示固定的值,比如:5,-89,"I love Go",67.89 等等。考虑如下程序:var a int = 50 var b string = "I love Go"上面的程序中, a 和 b 分别被赋值为常量翻译 2017-07-15 08:31:27 · 5363 阅读 · 0 评论 -
Golang教程:(三)变量
原文:https://golangbot.com/variables/这是本Golang系列教程的第三篇。本篇介绍Golang中的变量。你可以阅读 [Golang教程:(二)Hello World](http://blog.youkuaiyun.com/u011304970/article/details/74783686) 来学习如何建立 Go 工作空间以及编写和运行 hello world 程序。#什么是变量翻译 2017-07-14 15:16:03 · 4367 阅读 · 1 评论 -
Golang教程:(四)类型
原文:https://golangbot.com/types/这是本Golang系列教程的第四篇。你可以阅读 Golang教程:(三)变量 来学习有关变量的只是。下面是 Go 支持的基本类型:boolNumeric Types int8, int16, int32, int64, intuint8,uint16,uin32,uint64, uintfloat32, fl翻译 2017-07-14 15:18:58 · 4997 阅读 · 0 评论 -
Golang教程:(十四)字符串
原文:https://golangbot.com/strings/这是本Golang系列教程的第十四篇。string 类型单独提取为一篇教程是因为在 Go 中,string 的实现方式同其他语言的不同。什么是字符串在 Go 中字符串是 byte 数组。可以通过将内容放在双引号 "" 之间的方式来创建一个字符串。让我们看一个简单的例子,该例子创建并打印一个字符串:packag翻译 2017-07-16 08:04:49 · 3642 阅读 · 0 评论 -
Golang教程:(十三)Map
原文:https://golangbot.com/maps/这是本Golang系列教程的第十三篇。什么是 map?Map 是 Go 中的内置类型,它将键与值绑定到一起。可以通过键获取相应的值。如何创建 map?可以通过将键和值得类型传递给内置函数 make 来创建一个 map。语法为:make(map[KeyType]ValueType)。例如:personSalary翻译 2017-07-16 08:04:05 · 17723 阅读 · 0 评论 -
Golang教程:(二十一)协程
原文:https://golangbot.com/goroutines/在上一篇教程中,我们讨论了并发,以及并发和并行的区别。在这篇教程中我们将讨论在Go中如何通过Go协程实现并发。什么是协程Go协程(Goroutine)是与其他函数或方法同时运行的函数或方法。可以认为Go协程是轻量级的线程。与创建线程相比,创建Go协程的成本很小。因此在Go中同时运行上千个协程是很常见的。翻译 2017-07-18 06:46:47 · 14698 阅读 · 0 评论 -
Golang教程目录
Golang系列教程目录翻译 2017-07-14 13:58:36 · 6179 阅读 · 0 评论 -
Golang教程:(二十)并发介绍
原文:https://golangbot.com/concurrency/欢迎来到Golang系列教程的第二十篇。Go是并发语言,而不是并行语言。在讨论Go并发性之前,我们必须首先了解什么是并发,以及并发与并行的区别。什么是并发并发(concurrency)是指一次处理大量事情的能力。让我们用一个例子来说明。假设一个人喜欢慢跑。在早上的慢跑中,他的鞋带开了。现在他停下来系鞋带,翻译 2017-07-14 08:21:31 · 4364 阅读 · 0 评论 -
Golang教程:(二)Hello World
原文:https://golangbot.com/hello-world/这是本Golang系列教程的第二篇。请阅读 [Golang教程:(一)介绍和安装](http://blog.youkuaiyun.com/u011304970/article/details/74783552) 来了解什么是Golang以及如何安装它。除了亲自写代码以外没有更好的方式来学习一门新的编程语言。在这篇教程中我们将开始编写我们的第一个程序翻译 2017-07-14 15:09:44 · 5175 阅读 · 0 评论 -
Golang教程:(十八)接口 - I
原文:https://golangbot.com/interfaces-part-1/欢迎来到Golang系列教程的第十八篇。这个接口的第一部分,一共有两部分。什么是接口在面向对象语言中,接口一般被定义为 :接口定义了一个对象的行为。它仅仅指定了一个对象应该做什么。具体怎么做(实现细节)是由对象决定的。在 Go 中,一个接口定义为若干方法的签名。当一个类型定义了所有接口里的方法翻译 2017-07-17 08:10:46 · 3625 阅读 · 0 评论 -
Golang教程:(十九)接口 - II
原文:https://golangbot.com/interfaces-part-2/欢迎来到Golang系列教程的第十九篇。这是介绍接口的第二篇。如果你还没有阅读第一篇,可以在这里阅读。用指针接收者实现接口在 接口 - I 中所有例子都是以值为接收者。也可以使用指针接收者来实现接口。让我们通过一个程序看看这是如何做到的。package mainimport "fmt"翻译 2017-07-17 08:11:17 · 2734 阅读 · 0 评论 -
Golang教程:(十七)方法
原文:https://golangbot.com/methods/欢迎来到Golang系列教程的第十七篇。什么是方法一个方法只是一个函数,它有一个特殊的接收者(receiver)类型,该接收者放在 func 关键字和函数名之间。接收者可以是结构体类型或非结构体类型。可以在方法内部访问接收者。通过下面的语法创建一个方法:func (t Type) methodName(par翻译 2017-07-17 08:09:57 · 3311 阅读 · 0 评论 -
Golang教程:(十六)结构体
原文:https://golangbot.com/structs/欢迎来到Golang系列教程的第十六篇。什么是结构体结构体(struct)是用户自定义的类型,它代表若干字段的集合。有些时候将多个数据看做一个整体要比单独使用这些数据更有意义,这种情况下就适合使用结构体。比如将一个员工的 firstName, lastName 和 age 三个属性打包在一起成为一个 employ翻译 2017-07-17 08:09:17 · 4363 阅读 · 0 评论 -
Golang教程:(十五)指针
原文:https://golangbot.com/pointers/这是本Golang系列教程的第十五篇。什么是指针指针是存储一个变量的内存地址的变量。 在上图中,变量 b 的值是 156,存储在地址为 0x1040a124 的内存中。变量 a 存储了变量 b 的地址。现在可以说 a 指向 b。指针的声明指向类型 T 的指针用 *T 表示。让我们写一些代码翻译 2017-07-17 08:08:35 · 19258 阅读 · 0 评论 -
Go批量修改文件名
工作中遇到了批量修改文件名的情况,为此写了个小程序,以供日后方便。代码如下:package mainimport ( "flag" "fmt" "os" "path/filepath")func main() { // 解析命令行参数 var dir string flag.StringVar(&dir, "d", "", "director原创 2017-07-07 09:37:08 · 3014 阅读 · 0 评论 -
Golang教程:(一)介绍和安装
原文:https://golangbot.com/golang-tutorial-part-1-introduction-and-installation/这是本Golang系列教程的第一篇。什么是GolangGolang 又称为 Go,是由 Google 开发的一种开源的、编译型的、静态类型的编程语言。Golang 的主要目的是使开发高可用性和高扩展性的Web应用程序变得简单。为什么选择Golan翻译 2017-07-14 14:09:43 · 5631 阅读 · 0 评论 -
Go标准容器之Ring
简介Go的标准包Container中包含了常用的容器类型,包括conatiner/list,container/heap,container/ring,本篇讲解container/ring的使用。ring包ring包提供了环形链表的操作。它仅导出了一个类型,Ring:// Ring表示环形链表中的元素。type Ring struct { Value interface{} // Valu原创 2017-06-01 12:59:38 · 4435 阅读 · 0 评论 -
Go使用Text和HTML模板
简介Go的两个包text/template和html/template提供了将变量的值替换到文本的机制。通常用在一些printf应付不了的、需要复杂的格式化的场合。模板的使用模板规则Action模板是一个包含了一个或多个双花括号标记({{...}})的字符串,这种双花括标记号叫做Action。模板中所有的除Action的字符串都按照原样打印,Action则表现了特殊的行为。通过Action可以打印变原创 2017-05-05 15:37:52 · 6568 阅读 · 0 评论 -
Go error 接口
Go的标准库函数在发生错误时会返回error类型,比如常用的os.Open函数用来打开文件,错误时返回error:func Open(name string) (*File, error)那么究竟什么是error类型呢?其实很简单,error是一个接口,该接口只声明了一个方法Error(),返回值是string类型,用以描述错误:type error interface { Error()原创 2017-05-24 14:09:18 · 3101 阅读 · 0 评论 -
Go学习笔记
##Go语言- Go是一种开放源码的程序设计语言,它意在使得人们能够方便地构建简单、可靠、高效的软件。- Go有时被称为“类C语言”或“21世纪的C”。从C中,Go集成了表达式语法、控制流语句、基本数据类型、按值调用的形参传递、指针,但比这些更重要的是,继承了C所强调的程序要编译成高效的机器码,并自然地与所处的操作系统提供的抽象机制相配合。原创 2017-04-23 17:20:51 · 5306 阅读 · 3 评论 -
Go for的三重陷阱
说明这篇for的三重陷阱取自我的另一篇博文Go学习笔记。为了方便快速的查找,将其复制了过来。for陷阱之循环变量在使用匿名函数时,须特别注意在for词块中引入的循环变量。如果在匿名函数里保存了这个变量,则会造成意想不到的结果,例如,下面的程序试将一个数组的元素全部图临置成0,随后再恢复原来的值:func main() { a := [3]int{1, 2, 3} var recs原创 2017-05-24 11:31:32 · 4383 阅读 · 2 评论 -
Go使用Base64编解码
简介Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,可用于在HTTP环境下传递较长的标识信息。Go 的 encoding/base64 提供了对base64的编解码操作。encoding/base64 定义了一个Encoding结构体,表示Base64的编/解码器。并且导出了四个常用的Encoding对象:StdEncoding、URLEncoding、RawStdEncodin原创 2017-05-23 13:30:51 · 16920 阅读 · 0 评论 -
Go压缩解压文件夹
Go的archive/zip包提供了文件的压缩和解压,本例涉及到的API如下(仅列出重要部分):// zip.Writer用来写入压缩包type Writer struct { // Has unexported fields.}// Create方法用来在zip包里创建文件,返回的io.Writer用来写内容func (w *Writer) Create(name string)原创 2017-05-03 18:08:49 · 4517 阅读 · 2 评论 -
Go计算MD5和SHA1
Go的crypto包中提供了丰富的加密工具,可以计算 MD5、SHA1、SHA256 等等,他们分别在包 crypto/md5、crypto/sha1、crypto/sha256 中。每一种算法提供的接口都大致相同,如下所示(仅列出重要部分):// 创建一个Hash对象,用于计算相应的加密值func New() hash.Hash// 计算 data 的加密值,Size是一个常量,用于表示加密值的原创 2017-05-23 08:30:41 · 9171 阅读 · 0 评论 -
Go调用DLL
package mainimport ( "fmt" "syscall" "unsafe")func main() { dll := syscall.MustLoadDLL("test.dll") procGreet := dll.MustFindProc("greet") procGreet.Call() procSay :=原创 2017-05-22 21:08:03 · 7574 阅读 · 0 评论 -
Go遍历文件夹
简介Go的path/filepath提供了Walk函数用来遍历文件夹,原型如下:func Walk(root string, walkFn WalkFunc) errorroot 为要遍历的文件夹。在遍历(按照字母顺序)每个文件或文件夹(包括root)时会调用walkFn,它的类型是WalkFunc:type WalkFunc func(path string, info os.FileInfo,原创 2017-05-03 16:16:54 · 3980 阅读 · 0 评论 -
Go上传文件
简介Go提供的net/http和mime/multipart两个包可以很容易的实现http文件上传。客户端package mainimport ( "bytes" "io" "log" "mime/multipart" "net/http" "os")func main() { // 创建表单文件 // CreateFormFile 用原创 2017-05-02 15:40:39 · 12216 阅读 · 1 评论 -
Go解析命令行传入参数
APIGo的flag包用来解析命令行参数。 参数的表示方法为:-flag-flag=x-flag x // x不能是bool值主要的API如下:// 获取名字为name的参数值,默认值为value,用法为usage// 注意返回值是一个指针// 类似的方法还有 Int(),Bool()等。func String(name string, value string, usage strin原创 2017-05-05 16:02:18 · 8919 阅读 · 1 评论 -
Go生成随机数
Go的math/rand包提供了生成随机数的API,重要的API如下:// 该函数设置随机种子// 若不调用此函数设置随机种子,则默认的种子值为1,由于随机算法是固定的,// 如果每次都以1作为随机种子开始产生随机数,则结果都是一样的,因此一般// 都需要调用此函数来设置随机种子,通常的做法是以当前时间作为随机种子// 以保证每次随机种子都不同,从而产生的随机数也不通// 该函数协程安全原创 2017-05-25 07:54:24 · 64284 阅读 · 0 评论 -
Go标准容器之Heap
简介本篇主要介绍如何使用container/heap包实现最小堆。关于堆的概念请参阅相关资料。heap包container/heap包仅仅提供了最小堆的操作,没有提供堆的数据结构,堆的数据结构必须我们自己实现。heap包提供了一个heap.Interface接口来作为堆的操作(heap包提供)和堆的数据结构(我们自己实现)之间的桥梁,堆的数据结构必须满足此接口:container/heap−−−−−原创 2017-06-01 09:27:55 · 3010 阅读 · 4 评论 -
Go排序
简介Go的sort包提供了排序功能。包括基本类型的排序和自定义数据(通常是结构体数组)的排序。基本类型的排序sort提供了以下API对基本类型进行排序,查找// 排序func Ints(a []int)func Float64s(a []float64)func Strings(a []string)// 判断是否已经排序func IntsAreSorted(a []i原创 2017-05-09 18:24:34 · 1392 阅读 · 0 评论 -
Go操作JSON
简介JavaScript Object Notation(JSON)是一个数据交换标准,因其简单、可读性强广泛使用。Go的标准包encoding/json对JSON的编解码提供了完整的支持。编码编码即将Go数据类型转换为JSON。用到的函数:func Marshal(v interface{}) ([]byte, error)该函数递归遍历v的结构,生成对应的JSON例如:原创 2017-04-26 12:56:33 · 18084 阅读 · 0 评论