
go
iQuelea
有理想,要追求
展开
-
Go语言学习 一 基础篇:环境配置
本文最初发表在我的个人博客,欢迎查看原文:https://blog.favorstack.io/golang/go-development-env-config.html简介官方是这样介绍Go的:Go是一种开源编程语言,可以轻松构建简单、可靠、高效的软件。Go is an open source programming language that makes it easy to bu...原创 2019-03-23 00:14:38 · 328 阅读 · 0 评论 -
Go语言学习 十五 数组和切片
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验数组是一种重要的数据结构,一旦声明长度就是固定的,实际中,更为灵活的切片可能使用更为广泛。切片底层实现就是使用的数组。一 数组数组是一种长度固定的数据结构,一旦声明,长度和元素的类型就不可变,并且在内存中是一段连续的块。数组中元素的个数即为数组的长度。数组的长度是一个int类型,可以使用内置函数len()来获取。另外,数组中的每一个元...原创 2019-06-15 13:23:04 · 378 阅读 · 0 评论 -
Go语言学习 十六 映射
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验映射是一种键-值对类型的内置数据结构。它将键映射到值,其中键是唯一的,即不允许重复,重复则会覆盖之前的值。映射的键类型必须是完整的定义了相等运算符(==和!=)的类型,如整数,浮点数,复数,字符串,指针,结构和数组;如果键是接口类型,则其动态类型必须支持相等比较。因此,键类型不能是函数,映射或切片。失败会触发运行时panic。映射中的元素...原创 2019-06-15 13:28:15 · 364 阅读 · 0 评论 -
Go语言学习 十七 指针
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go语言有指针的概念,指针保存了值的内存地址。指针的零值为nil。指针类型表示指向给定类型的变量的所有指针的集合,该类型称为指针的基本类型。给定一个类型T,其中类型*T是指向T类型值的指针:package mainimport "fmt"func main() { var p *int i := 5 p = &...原创 2019-06-16 22:09:45 · 148 阅读 · 0 评论 -
Go语言学习 十八 类型体系
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go语言中的类型既有预定义的,也允许用户自定义。正如在Java中我们可以自定义类一样,在Go中我们可以通过自定义类型来创造新的数据类型。复合字面量可以为结构、数组、切片或映射类型构造值,字面量的底层类型必须是以上类型,该规则受语法的强制约束,除非类型以类型名称给出。元素和键的类型必须可分配给字面量类型的相应字段、元素和键的类型;没有额外...原创 2019-06-16 22:14:32 · 277 阅读 · 0 评论 -
Go语言学习 十九 方法
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验上一篇文章中介绍了关于Go的类型体系。在Go中,可以为结构等类型定义方法。方法就是带有接收者参数的函数。方法接收者位于func关键字和方法名之间。一 方法的声明将方法的接收者指定为某一个类型,该方法即成为指定类型的方法。例如,以下为Point类型定义了一个Abs()方法:package mainimport ( "fmt"...原创 2019-06-26 00:13:17 · 227 阅读 · 0 评论 -
Go语言学习 二十 接口
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验接口是一组方法的集合,接口类型的方法集是其接口。在Go中,接口的实现无需显示指明,只需要实现类型实现了一个接口的所有方法,就表示该类型实现了该接口,这种实现方式也称为隐式实现。隐式接口实现解耦了接口的定义,这样,可以在任何包中实现一个接口,同时,也使得接口的定义更加明确。一 接口1.1 接口声明接口的声明需要使用interface关...原创 2019-06-26 00:19:46 · 328 阅读 · 0 评论 -
Go语言学习 二十一 内嵌
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验在像Java这种语言中,有子类(或者继承)的概念,通过继承复用已有的功能或属性,与继承不同,Go中使用组合的方式来完成已有实现的复用,这种做法称为内嵌。具体来说,就是将已定义类型内嵌到结构体或接口中完成组合。一 接口内嵌接口内嵌非常简单。例如标准库中的io.Reader和io.Writer接口,它们的定义如下:type Reader...原创 2019-06-27 02:13:11 · 1226 阅读 · 0 评论 -
Go语言学习 二十二 并发
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验并发是每个编程语言绕不开的一个话题,Go在并发编程方面提供了许多特性,帮助简化并发模型,如轻量级的线程goroutine,信道等,同样也提供了如sync.Mutex等的锁机制。为实现对共享变量的正确访问,Go语言提供了一种特殊的控制方式,即将共享的值通过信道传递。信道是一种带有方向的管道,数据可以在其中流转。在任意一个的时间点,只有一个...原创 2019-06-28 00:25:54 · 630 阅读 · 0 评论 -
Go语言学习 二十三 错误处理和运行时恐慌(Panic)
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验一 错误1.1 error类型按照约定,Go中的错误类型为error,这是一个内建接口,nil值表示没有错误:type error interface { Error() string}我们可以很方便的自定义一个错误类型:package mainimport ( "fmt")func main()...原创 2019-06-28 00:38:43 · 816 阅读 · 0 评论 -
Go语言学习 二十四 打印
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go中的格式化打印使用类似C的printf系列的风格,但功能更为丰富和通用。这些函数位于fmt包中,并具有大写名称:fmt.Printf,fmt.Fprintf,fmt.Sprintf 等等。字符串函数(Sprintf等)返回一个字符串,而不是填充提供的缓冲区。fmt包中打印函数如下:func Fprint(w io.Writer, ...原创 2019-06-28 00:44:03 · 983 阅读 · 0 评论 -
Go语言学习 十四 基本数据类型
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验类型确定一组值以及特定于这些值的操作和方法。类型可以由类型名称表示(如果有的话),或者使用类型字面量指定,则类型名称由现有类型组成。可以使用类型字面量构造复合类型-数组,结构,指针,函数,接口,切片,映射和信道类型。每个类型T都有一个基础类型:如果T是预先声明的布尔,数字或字符串类型之一,或者是类型字面量,则相应的基础类型是T本身。否...原创 2019-06-03 21:58:03 · 215 阅读 · 0 评论 -
Go语言学习 十三 类型转换和类型推导
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验一 类型转换与C不同的是,Go在不同类型的项之间赋值时需要显式转换。显示转换语法形如T(x),其中T为要转换的目标类型,x是一个可以转换为T的表达式。例如:一些关于数值的转换:var i int = 42var f float64 = float64(i)var u uint = uint(f)或者,更加简单的形式:i ...原创 2019-06-03 21:46:54 · 627 阅读 · 0 评论 -
Go语言学习 十一 defer语句
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go的defer语句用于延迟调用函数,该语句在执行defer的函数返回之前立即执行,换句话说,defer将函数推迟到外层函数执行完毕但返回之前执行。这在处理那些必须释放资源等的情况下非常有用,无论当前函数执行结果如何。类似于Java中的finally或try-with-resources。一 defer语句语法:defer f...原创 2019-05-29 23:44:49 · 257 阅读 · 0 评论 -
Go语言学习 二 概念篇:Go代码的组织结构及基本概念介绍
本文最初发表在我的个人博客,欢迎查看原文:blog.favorstack.io概览Go程序员通常会将所有Go代码保存在一个工作区中。工作空间可以包含多个版本控制仓库(比如,Git仓库)。每个仓库可以包含一个或多个包。每个包由一个目录中的一个或多个Go源文件组成。包目录的的路径决定了其导入路径。使用过Eclipse的同学可能觉得这跟Eclipse的工作空间有点像,但是跟Idea...原创 2019-03-23 00:25:54 · 793 阅读 · 0 评论 -
Go语言学习 三 实例详解
本文最初发表在我的个人博客,欢迎查看原文:blog.favorstack.io/golang上一篇文章介绍了Go代码的组织结构及一些基本概念,下面将以github.com/favorstack作为基路径,在工作空间中创建一个目录来保存源代码,介绍一下基本的语法。一 第一个程序Hello world程序1). 创建基路径:$ mkdir -p $GOPATH/src/github.com...原创 2019-03-29 01:59:50 · 373 阅读 · 0 评论 -
Go语言学习 四 代码的格式化
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验一 代码格式的统一Go推荐大家使用相同风格的代码格式,而不是在这个问题上花费过多的时间。为了统一代码格式,Go甚至自带了一个格式化工具gofmt(或者go fmt),该工具会从包级别而非源文件以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。也就是说,在写go代码时,无需过多的关注排列结构和对齐等,最...原创 2019-05-25 22:51:48 · 2210 阅读 · 0 评论 -
Go语言学习 五 注释和文档
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验一 注释Go提供了两种风格的注释:一种是C风格的块注释/* */,另一种是C++风格的行注释//,一般情况下使用行注释就可以了;块注释更多情况下出现在包的注释上,也可在表达式中或注掉大段代码时使用。注释不可嵌套,也不能从符文或字符串字面量中开始。二 go文档生成godoc命令既是一个程序,又是一个Web服务器。它可以从源代码的注...原创 2019-05-25 22:58:25 · 891 阅读 · 0 评论 -
Go语言学习 六 命名约定
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验和其他语言一样,在Go中,命名非常重要,甚至还有语义效果:一个名称在包外是否可见,取决于它的首字母是否大写。在导入一个包后,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问。一 包名包名可以作为包内容的访问器。包名应该尽量简单,好记。按照约定,所有包名使用小写字母,且使用单个单词表示,不需要使用下划线或大小写混合的方...原创 2019-05-25 23:01:21 · 279 阅读 · 0 评论 -
Go语言学习 七 流程控制之if-else
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go中关于流程控制方面主要有if-else,for循环,switch。另外,Go中还多了一种新的控制结构select,这种结构包含一个类型开关和一个多路通信复用器;if和switch接受类似for的可选初始化语句;break,continue和goto语句采用可选标签来标识要中断或继续以及要跳转的内容;与C相比,Go的控制结构语法也有些区...原创 2019-05-26 06:12:03 · 405 阅读 · 0 评论 -
Go语言学习 八 流程控制之for循环
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验与大多数语言不同,Go中没有do或while循环,只有一个简单通用的for循环;for循环有四种写法,其中只有第一种需要分号:一 基本的for循环// C风格的forfor init; condition; post { // statements}基本的 for 循环由三部分组成,它们用分号隔开:初始化语句:在第一次...原创 2019-05-26 06:17:16 · 380 阅读 · 0 评论 -
Go语言学习 九 流程控制之switch
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验在Go中,switch语法非常灵活。Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只运行选定的 case,而非之后所有的 case。实际上,Go自动提供了每个 case 后面所需的 break 语句。 除非以fallthrough语句结束,否则分支会自动终止。 Go 的另一...原创 2019-05-26 06:23:40 · 400 阅读 · 0 评论 -
Go语言学习 十 函数
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go中的函数除了可以声明入参之外,还可以声明结果参数(即返回值)。函数可以没有参数或接受多个参数,并且类型在变量名之后。当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。一 函数声明语法:func 函数名 (签名 类型)[([结果签名 ]类型)]][函数体]例如:示例1:// 普通函数func ...原创 2019-05-28 06:15:05 · 405 阅读 · 0 评论 -
Go语言学习十二 变量和常量
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验Go 使用var关键字声明变量;使用关键字const声明常量。变量可以像常量一样初始化。一 变量1.1 变量声明语法:var 变量名 变量类型 | = 值var x intvar y string = "hello"var z = 2var c, python, java = true, false, "no!"var ...原创 2019-06-01 07:15:56 · 264 阅读 · 0 评论 -
Go语言学习 二十五 Go中的作用域
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验在Go中,声明标识符的作用范围是源文件的范围,其中标识符表示指定的常量、类型、变量,函数、标签或包等。一 作用域Go使用块的词法来管理作用域:预声明的标识符的范围是全局的(哪都可以用)。顶层(在任何函数之外)声明的常量,类型,变量或函数(但不是方法)的标识符的范围是包级别。导入包的作用域是包含导入包声明的文件范围方法接收者,...原创 2019-07-11 07:18:34 · 786 阅读 · 0 评论