
go基础
这个名字想了很久
向大神的目标前进!
展开
-
go语言学习-开发环境安装(一)
go安装分别下载对应系统的版本,下载地址:http://www.golangtc.com/downloadWindows golang安装下载go1.9.2.windows-386.msi文件,然后傻瓜式安装。安装路径就使用它默认的 C:\Go\ 即可,之后一路 Next 。windows配置环境变量Go 语言需要配置 GOROOT 和 Path 两个环境变量:GOROOT 和 GOPA...转载 2019-01-13 19:50:39 · 434 阅读 · 0 评论 -
go语言学习-协程(二十一)
转载自:https://golangbot.com/goroutines/在上一篇教程中,我们讨论了并发,以及并发和并行的区别。在这篇教程中我们将讨论在Go中如何通过Go协程实现并发。什么是协程?Go 协程(Goroutine)是与其他函数或方法一起并发运行的函数或方法。协程可以被认为是轻量级线程。与线程相比,创建协程的成本很小。因此在Go中同时运行上千个协程是很常见的。Go 协程相比于线...翻译 2019-01-13 19:59:35 · 466 阅读 · 0 评论 -
go语言学习-并发简介(二十)
转载自:https://golangbot.com/concurrency/Go是一种并发语言,而不是并行语言。在讨论如何在Go中处理并发之前,我们必须首先了解什么是并发以及它与并行的区别。什么是并发?并发是同时处理大量事情的能力。最好用一个例子来解释。假设一个人喜欢慢跑。在他早上的慢跑时,他的鞋带开了。现在他停下来系鞋带,然后继续慢跑。这就是典型的并发。这个人有能力处理慢跑和系鞋带两件事...翻译 2019-01-13 20:00:09 · 307 阅读 · 0 评论 -
go语言学习-信道(二十二)
转载自:https://golangbot.com/channels/在上一篇教程中,我们讨论了如何使用协程在go中实现并发。在本教程中,我们将讨论有关信道以及如何使用信道实现协程间通信。什么是信道信道(Channel)可以被认为是协程之间通信的管道。类似于水在管道中从一端流向另一端一样,数据可以从信道的一端发送并在另一端接收。声明信道每个信道都有一个与之关联的类型。此类型是该信道允许传...翻译 2019-01-13 20:00:56 · 820 阅读 · 0 评论 -
go语言学习-缓冲信道与工作池(二十三)
转载自:https://golangbot.com/buffered-channels-worker-pools/什么是缓冲信道我们在上一个教程中讨论的所有信道基本上都是的无缓冲区的信道,正如我们在 信道教程中详细讨论的那样,对一个无缓冲的信道进行发送 和 接受 数据 都是阻塞的。我们也可以创建一个带缓冲区的信道,往信道中发送数据时,只有当缓冲区满的情况下才会阻塞;类似的,我们从信道中接受数...翻译 2019-01-13 20:01:20 · 532 阅读 · 0 评论 -
go语言学习-select(二十四)
转载自:https://golangbot.com/select/什么是selectselect语句用于从多个读写通道中进行选择。select语句将会阻塞,直到有一个读写通道就绪。如果有多个读写通道就绪,会从中任意选择一个。select语法类似switch语句,除了每个case语句必须是通道操作。让我们深入代码以便更好的理解。package mainimport ( "fmt" "...翻译 2019-01-13 20:01:41 · 408 阅读 · 0 评论 -
go语言学习-Mutex(二十五)
转载自:https://golangbot.com/mutex/在本教程中,我们将了解Mutex(互斥锁)。我们还将学习如何使用Mutex和信道解决竞争问题。临界区在学习Mutex之前,了解并发编程中关键概念非常重要。当程序并发运行时,多个协程不应该同时访问修改共享资源的代码。修改共享资源的这段代码称为临界区。例如,假设我们有一段代码,将一个变量 x 自增 1。x = x + 1 如...翻译 2019-01-13 20:02:07 · 351 阅读 · 0 评论 -
go语言学习-go中的OOP-结构体取代类(二十六)
转载自:https://golangbot.com/structs-instead-of-classes/Go不是纯粹的面向对象编程语言。下面摘自Go的FAQs 解答了Go是否是面向对象的问题。翻译:可以说是,也可以说不是。虽然GO具有类型和方法,并且允许面向对象的编程风格,但是没有类型层次结构。Go中的”接口”概念提供了一种不同的特性,我们认为这种特性很容易使用,而且在某些方面更通用。在g...翻译 2019-01-13 20:02:32 · 538 阅读 · 0 评论 -
go语言学习-go中的OOP-组合取代继承(二十七)
转载自:https://golangbot.com/inheritance/Go语言不支持继承,但是它支持组合。组合的定义是“放在一起”,组合的一个例子是车的组成,一辆车是由轮子,发动机和其他组件组合而成。结构体嵌套组合Go中的组合可以通过将一种结构体类型嵌入另一种结构体类型来实现。博客文章是组合的经典例子。每篇博文都有标题,内容和作者信息,使用组合可以很好地表示它们。通过学习本教程后面的...翻译 2019-01-13 20:02:55 · 579 阅读 · 0 评论 -
go语言学习-go中的OOP-多态(二十八)
转载自:https://golangbot.com/polymorphism/Go中的多态性是在接口interface的帮助下实现的。正如我们已经讨论过的,接口可以在Go中隐式实现。如果一个类型定义了某个接口中声明的所有方法,则该类型实现了这个接口。让我们看看,利用接口,如何在Go中实现多态性。使用接口实现多态任何一种类型,如何定义了某个接口中声明的所有方法,那么该类型就隐式实现了这个接口。...翻译 2019-01-13 20:03:26 · 507 阅读 · 0 评论 -
go语言学习-defer(二十九)
转载自:https://golangbot.com/defer/什么是 defer?defer语句的作用:含有defer语句的函数结束之前调用另外一个函数。定义看起来很复杂,我们通过一个例子就很容易理解。package mainimport ( "fmt")func finished() { fmt.Println("Finished finding lar...翻译 2019-01-13 20:03:44 · 476 阅读 · 0 评论 -
go语言学习-错误处理(三十)
转载自:https://golangbot.com/error-handling/什么是错误?错误表示程序中的异常情况。假设我们正在尝试打开文件,文件系统中却不存在该文件。这是一种异常情况,它用错误来表示。在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。就像其他的内建类型(如 int、float64 等),错误值可以存储在变量里、作为函数的返回值等等。示例现在...翻译 2019-01-13 20:04:03 · 499 阅读 · 0 评论 -
go语言学习-自定义错误(三十一)
转载自:https://golangbot.com/custom-errors/在上一个教程中,我们学习了 Go 中的错误是如何表示的,以及如何处理标准库里的错误。我们还学习了从标准库的错误中提取更多的信息。本教程介绍如何创建我们自己的自定义错误,我们可以在我们创建的函数和包中使用它们。我们会使用与标准库中相同的技术,来提供自定义错误的更多细节信息。使用 New 函数创建自定义错误创建自...翻译 2019-01-13 20:04:23 · 643 阅读 · 0 评论 -
go语言学习-panic 和 recover (三十二)
转载自:https://golangbot.com/panic-and-recover/什么是 panic?在 Go 程序中,一般是使用错误来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用 panic 来终止程序。当函数发生 panic 时,它会终止运行,在执行完所有的defer函数后,程序控制返回到该函...翻译 2019-01-13 20:04:42 · 682 阅读 · 0 评论 -
go语言学习-头等函数 (三十三)
转载自:https://golangbot.com/first-class-functions/什么是头等函数支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其它函数的参数或者返回值。Go 语言支持头等函数。本教程我们会讨论头等函数的语法和用例。匿名函数让我们先从一个简单例子开始:将函数赋值给一个变量。package mainimport ( "fmt"...翻译 2019-01-13 20:05:04 · 437 阅读 · 0 评论 -
go语言学习-反射 (三十四)
转载自:https://golangbot.com/reflection/反射是go语言中的高级特性之一,我会尽量将它讲的通俗易懂。本教程包含以下部分:什么是反射?为何需要在运行时检查变量的值,并确定变量的类型?reflect 包reflect.Type 和 reflect.Valuereflect.KindNumField() 和 Field() 方法Int() 和 St...翻译 2019-01-13 20:05:28 · 741 阅读 · 0 评论 -
go语言学习-读取文件 (三十五)
转载自:https://golangbot.com/read-files/读取文件是所有编程语言中最常见的操作之一。本教程我们将了解如何使用 Go 读取文件。本教程包含以下部分:将整个文件读取到内存使用绝对文件路径将文件路径作为命令行标志传递将文件绑定在二进制文件中分块读取文件逐行读取文件将整个文件读取到内存将整个文件读取到内存是最基本的文件操作之一。我们可以借助 i...翻译 2019-01-13 20:06:29 · 5617 阅读 · 0 评论 -
go语言学习-接口_2(十九)
转载自:https://golangbot.com/interfaces-part-2/这是介绍接口的第二篇。如果你还没有阅读第一篇,可以在这里阅读。使用指针接收器和值接收器实现接口我们在第1部分中讨论的所有示例接口都是使用值接收器实现的。还可以使用指针接收器实现接口。在使用指针接收器实现接口时需要注意一些细微之处。让我们使用以下程序来了解。package mainimport "fm...翻译 2019-01-13 19:59:12 · 342 阅读 · 0 评论 -
go语言学习-接口_1(十八)
转载自:https://golangbot.com/interfaces-part-1/什么是接口在面向对象语言中,接口一般被定义为 :接口定义了对象的一系列行为。接口仅仅指定了一个对象应该做什么。具体怎么做(实现细节)是由对象决定的。在 Go 中,接口是一组方法签名。当一个类型定义了所有接口里的方法时,就说这个类型实现了这个接口。这和 面向对象OOP 很像。接口指定了一个类型应该具有什么方...翻译 2019-01-13 19:58:53 · 348 阅读 · 0 评论 -
go语言学习-hello world(二)
转载自: https://blog.youkuaiyun.com/codemanship/article/details/29429477?utm_source=blogxgwz2学习任何编程语言的第一个程序都是Hello world,我就不打破这个传统了。看看Go的"Hello World"吧。package mainimport "fmt" //引入fmt库func main() {...转载 2019-01-13 19:51:25 · 269 阅读 · 0 评论 -
go语言学习-变量(三)
转载自:https://golangbot.com/variables/什么是变量变量是为存储特定类型的值的内存位置指定的名称。在 Go 中有多种声明变量的语法。声明一个变量声明一个变量的语法为:var name type,例如:package mainimport "fmt"func main() { var age int // variable declarat...翻译 2019-01-13 19:52:16 · 426 阅读 · 0 评论 -
go语言学习-基本类型(四)
转载自:https://golangbot.com/types/以下是go中可用的基本类型:boolNumeric Typesint8, int16, int32, int64, intuint8,uint16,uin32,uint64, uintfloat32, float64complex64, complex128byterunestringbool(布尔型)...翻译 2019-01-13 19:52:52 · 275 阅读 · 0 评论 -
go语言学习-常量(五)
转载自:https://golangbot.com/constants/常量定义常量(constant)表示固定的值,比如:5,-89,"I love Go",67.89 等等。看下面这段程序:var a int = 50 var b string = "I love Go"上面的程序中,a和 b 分别被赋值为常量 50 和 "I love Go&翻译 2019-01-13 19:53:23 · 667 阅读 · 0 评论 -
go语言学习-函数(六)
转载自:https://golangbot.com/functions/什么是函数函数是执行特定任务的代码块。函数接受输入,对输入执行一些计算并生成输出。函数声明在 Go 中声明一个函数的语法为:func functionname(parametername type) returntype { //function body}函数声明以func关键字开头,后面是函数名称。接...翻译 2019-01-13 19:53:52 · 263 阅读 · 0 评论 -
go语言学习-包(七)
转载自:https://golangbot.com/packages/什么是包?为什么使用包?到目前为止,我们已经看到了GO程序:它只有一个文件,它有一个主函数和几个其他函数。在实际场景中,这种在一个文件中编写所有源代码的方法是行不通的。以这种方式编写的代码是不可能重用和维护的。包(package)用于解决这样的问题。包用于组织go源代码以获得更好的可重用性和可读性。软件包提供了代码的分隔,...翻译 2019-01-13 19:54:18 · 628 阅读 · 0 评论 -
go语言学习-if else 语句(八)
转载自:https://golangbot.com/if-statement/if是条件语句。if语句的语法是:if condition { }如果 condition 为 true,那么就执行 { 和 } 之间的代码。与其它语言(如C语言)不同,即使 {} 之间只有一条语句,{} 也是必需的。if语句后面还具有可选else if和else语句:if condition {} ...翻译 2019-01-13 19:54:42 · 922 阅读 · 0 评论 -
go语言学习-循环语句(九)
转载自:https://golangbot.com/loops/循环语句用于重复执行代码块。for语句是Go中唯一可用的循环。Go没有while或do while循环,这些循环存在于其他语言中,如C.java。for循环语法for initialisation; condition; post { }initialisation 为初始化语句,该语句仅执行一次。initialisa...翻译 2019-01-13 19:55:01 · 257 阅读 · 0 评论 -
go语言学习-switch语句(十)
转载自:https://golangbot.com/switch/switch是一个条件语句,用于将一个表达式的结果与可能存在的值列表 进行比较,并根据匹配的结果执行对应的代码块。它可以被认为是编写多个if else子句的替代方式。举例是说明问题的最好方式,让我们从一个简单的示例开始,程序接受一个手指号,并输出该手指号对应的的名称。例如,1是拇指,2是食指等。package mainim...翻译 2019-01-13 19:55:28 · 486 阅读 · 0 评论 -
go语言学习-数组与切片(十一)
转载自:https://golangbot.com/arrays-and-slices/数组数组是同一类型的元素的集合。例如,整数 5, 8, 9, 79, 76 的集合就构成了一个数组。Go不允许在数组中混合使用不同类型的元素(例如包含整数和字符串的数组)。数组是一种非常有用的数据结构,因为其占用的内存是连续分配的。由于内存连续,CPU 能把正在使用的数据缓存更久的时间。而且内存连续很容易...翻译 2019-01-13 19:55:57 · 391 阅读 · 0 评论 -
go语言学习-变参函数(十二)
转载自:https://golangbot.com/variadic-functions/什么是变参函数?变参函数是指可以接受可变数量的参数的函数。语法如果函数的最后一个参数表示为...T,则该函数可以接受任意数量T类型参数。注意:必须是参数列表的最后一个参数才可以指定为可变参数。通过示例来理解可变函数如何工作你有没有想过,为什么 append 函数可以追加任意数量的值到切片中?这是...翻译 2019-01-13 19:56:44 · 558 阅读 · 0 评论 -
go语言学习-map(十三)
转载自:https://golangbot.com/maps/什么是 map?Map 是 Go 中的内置类型,它将key与value相关联。可以通过key获取相应的value。如何创建 map?可以通过将key和value的类型传递给make函数来创建map。创建map的语法为:make(map[type of key]type of value),例如:personSalary := ...翻译 2019-01-13 19:57:06 · 278 阅读 · 0 评论 -
go语言学习-字符串(十四)
转载自:https://golangbot.com/strings/String类型在Go中值得特别提到,因为与其他语言相比,它们的实现方式有所不同。什么是字符串在 Go 中字符串是 字节切片。可以通过将内容放在双引号 "" 之间的方式来创建一个字符串。让我们看一个简单的例子,该例子创建并打印一个字符串:package mainimport ( "fmt")func main(...翻译 2019-01-13 19:57:26 · 336 阅读 · 1 评论 -
go语言学习-指针(十五)
转载自:https://golangbot.com/pointers/什么是指针指针是存储另一个变量的内存地址的变量。在上图中,变量 b 的值是 156,在内存中的地址为 0x1040a124 。变量 a 存储了变量 b 的地址。现在可以说 a 指向 b。指针的声明* T是指针变量的类型,它指向类型T的值。让我们写一些代码。package mainimport ( "fmt"...翻译 2019-01-13 19:57:51 · 497 阅读 · 0 评论 -
go语言学习-结构体(十六)
转载自:https://golangbot.com/structs/什么是结构体?结构体是用户定义的类型,表示若干个字段的集合。有时候应该将多个数据分组到一个整体中,而不是将每个数据作为单独的类型进行维护。这种情况下可以使用结构体。例如,一个员工有 firstName、lastName 和 age 三个属性,而把这些属性组合在一个结构体 employee 中就很合理。结构体的声明type...翻译 2019-01-13 19:58:14 · 565 阅读 · 0 评论 -
go语言学习-方法(十七)
转载自:https://golangbot.com/methods/什么是方法方法是一个具有特殊的接收器类型的函数,在 func 关键字和函数名之间加入了一个特殊的接收器类型。该接收器可以是结构体类型或非结构体类型。接收器可以在方法内部访问。以下是创建方法的语法。func (t Type) methodName(parameter list) { }上面的代码片段创建了一个名为me...翻译 2019-01-13 19:58:34 · 408 阅读 · 0 评论 -
go语言学习-写入文件 (三十六)
转载自:https://golangbot.com/write-files/在本教程中,我们将学习如何使用Go将数据写入文件。我们还将学习如何并发写入文件。本教程包含以下部分将字符串写入文件将字节写入文件逐行将数据写入文件追加到文件并发写入文件将字符串写入文件将字符串写入文件是最常见的文件写入操作之一,这很简单。它包括以下步骤。创建文件将字符串写入文件让我们马上看...翻译 2019-01-13 20:07:12 · 2419 阅读 · 0 评论