【Go】GoLand安装使用

一 GoLand集成开发环境下载 IDE 下载地址:http://www.jetbrains.com/go/?fromMenu IDE安装就是平常的傻瓜式安装,这里就不多说了。 二 使用GoLand 1、 双击运行安装完的GoLand,选择创建项目,并关联GOROOT(会自动关联) 2、在项目上点击右键,按图选择,如下,给文件命一个名字,如 test 3、在文件中写入如下代码: 4、在文件上右键,选择 Run go build test.go,就可以看到控制台打印出hello world!啦 5、也可以在Terminal窗口下输入go run test.go,就可以看到打印结果 6、或者输入go build test.go ,会在当前路径下生成一个可执行文件(test),继续输入 ./test ,即可执行该可执行文件 END

2019年12月9日 · 1 分钟

【Go】Hello World

建立 Go 工作区 在编写代码之前,我们首先应该建立 Go 的工作区(Workspace)。 在 Mac 或 Linux 操作系统下,Go 工作区应该设置在 HOME/go∗∗。所以我们要在∗∗HOME/go∗∗。所以我们要在∗∗HOME 目录下创建 go 目录。 而在 Windows 下,工作区应该设置在 C:\Users\YourName\go。所以请将 go 目录放置在 C:\Users\YourName。 其实也可以通过设置 GOPATH 环境变量,用其他目录来作为工作区。但为了简单起见,我们采用上面提到的放置方法。 所有 Go 源文件都应该放置在工作区里的 src 目录下。请在刚添加的 go 目录下面创建目录 src。 所有 Go 项目都应该依次在 src 里面设置自己的子目录。我们在 src 里面创建一个目录 hello 来放置整个 hello world 项目。 创建上述目录之后,其目录结构如下: go src hello 在我们刚刚创建的 hello 目录下,在 helloworld.go 文件里保存下面的程序。 package main import "fmt" func main() { fmt.Println("Hello World") } 创建该程序之后,其目录结构如下: go src hello helloworld.go 运行 Go 程序 运行 Go 程序有多种方式,我们下面依次介绍。 ...

2019年12月9日 · 2 分钟

【Go】包管理详解

Go包管理 一 包管理历史 Golang 的包管理一直被大众所诟病的一个点,但是我们可以看到现在确实是在往好的方向进行发展。下面是官方的包管理工具的发展历史: 在 1.5 版本之前,所有的依赖包都是存放在 GOPATH 下,没有版本控制。这个类似 Google 使用单一仓库来管理代码的方式。这种方式的最大的弊端就是无法实现包的多版本控制,比如项目 A 和项目 B 依赖于不同版本的 package,如果 package 没有做到完全的向前兼容,往往会导致一些问题。 1.5 版本推出了 vendor 机制。所谓 vendor 机制,就是每个项目的根目录下可以有一个 vendor 目录,里面存放了该项目的依赖的 package。go build 的时候会先去 vendor 目录查找依赖,如果没有找到会再去 GOPATH 目录下查找。 1.9 版本推出了实验性质的包管理工具 dep,这里把 dep 归结为 Golang 官方的包管理方式可能有一些不太准确。关于 dep 的争议颇多,比如为什么官方后来没有直接使用 dep 而是弄了一个新的 modules,具体细节这里不太方便展开。 1.11 版本推出 modules 机制,简称 mod。modules 的原型其实是 vgo,关于 vgo,可以自行搜索。 除此之外,社区也一直在有几个活跃的包管理工具,使用广泛且具有代表性的主要有下面几个: godep glide govendor 二 modules 的使用 2.1 准备 Golang 版本:1.12.3。在 1.12 版本之前,使用 Go modules 之前需要环境变量 GO111MODULE: ...

2019年12月9日 · 3 分钟

【Go】变量

变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。 声明单个变量 var name type 是声明单个变量的语法。 package main import "fmt" func main() { var age int // 变量声明 fmt.Println("my age is", age) } 语句 var age int 声明了一个 int 类型的变量,名字为 age。我们还没有给该变量赋值。如果变量未被赋值,Go 会自动地将其初始化,赋值该变量类型的零值(Zero Value)。本例中 age 就被赋值为 0。如果你运行该程序,你会看到如下输出: my age is 0 变量可以赋值为本类型的任何值。上一程序中的 age 可以赋值为任何整型值(Integer Value)。 package main import "fmt" func main() { var age int // 变量声明 fmt.Println("my age is", age) age = 29 // 赋值 fmt.Println("my age is", age) age = 54 // 赋值 fmt.Println("my new age is", age) } 上面的程序会有如下输出: ...

2019年12月9日 · 3 分钟

【Go】常量

定义 在 Go 语言中,术语"常量"用于表示固定的值。比如 5 、-89、 I love Go、67.89 等等。 看看下面的代码: var a int = 50 var b string = "I love Go" 在上面的代码中,变量 a 和 b 分别被赋值为常量 50 和 I love GO。关键字 const 被用于表示常量,比如 50 和 I love Go。即使在上面的代码中我们没有明确的使用关键字 const,但是在 Go 的内部,它们是常量。 顾名思义,常量不能再重新赋值为其他的值。因此下面的程序将不能正常工作,它将出现一个编译错误: cannot assign to a.。 package main func main() { const a = 55 // 允许 a = 89 // 不允许重新赋值 } 常量的值会在编译的时候确定。因为函数调用发生在运行时,所以不能将函数的返回值赋值给常量。 package main import ( "fmt" "math" ) func main() { fmt.Println("Hello, playground") var a = math.Sqrt(4) // 允许 const b = math.Sqrt(4) // 不允许 } 在上面的程序中,因为 a 是变量,因此我们可以将函数 math.Sqrt(4) 的返回值赋值给它(我们将在单独的地方详细讨论函数)。 ...

2019年12月9日 · 3 分钟

【Go】函数

函数是什么? 函数是一块执行特定任务的代码。一个函数是在输入源基础上,通过执行一系列的算法,生成预期的输出。 函数的声明 在 Go 语言中,函数声明通用语法如下: func functionname(parametername type) returntype { // 函数体(具体实现的功能) } 函数的声明以关键词 func 开始,后面紧跟自定义的函数名 functionname (函数名)。函数的参数列表定义在 ( 和 ) 之间,返回值的类型则定义在之后的 returntype (返回值类型)处。声明一个参数的语法采用 参数名 参数类型 的方式,任意多个参数采用类似 (parameter1 type, parameter2 type) 即(参数1 参数1的类型,参数2 参数2的类型)的形式指定。之后包含在 { 和 } 之间的代码,就是函数体。 函数中的参数列表和返回值并非是必须的,所以下面这个函数的声明也是有效的 func functionname() { // 译注: 表示这个函数不需要输入参数,且没有返回值 } 示例函数 我们以写一个计算商品价格的函数为例,输入参数是单件商品的价格和商品的个数,两者的乘积为商品总价,作为函数的输出值。 func calculateBill(price int, no int) int { var totalPrice = price * no // 商品总价 = 商品单价 * 数量 return totalPrice // 返回总价 } 上述函数有两个整型的输入 price 和 no,返回值 totalPrice 为 price 和 no 的乘积,也是整数类型。 ...

2019年12月9日 · 2 分钟

【Go】开发环境搭建

一 下载地址 安装包下载地址为:https://golang.org/dl/。 如果打不开可以使用这个地址:https://golang.google.cn/dl/。 各个系统对应的包名: 操作系统 包名 Windows go1.13.3.windows-amd64.msi Linux go1.13.3.linux-amd64.tar.gz Mac go1.13.3.darwin-amd64.pkg FreeBSD go1.13.3.freebsd-amd64.tar.gz 二 安装 Linux安装 1、下载二进制包:go1.13.3.linux-amd64.tar.gz 2、将下载的二进制包解压至 /usr/local目录。 tar -C /usr/local -xzf go1.13.3.linux-amd64.tar.gz 3、将 /usr/local/go/bin 目录添加至PATH环境变量: export PATH=$PATH:/usr/local/go/bin Windows安装 Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.13.3.windows-amd64.msi)的安装包来安装。 默认情况下 .msi 文件会安装在 c:\Go 目录下。你可以将 c:\Go\bin 目录添加到 Path 环境变量中。添加后你需要重启命令窗口才能生效 Mac安装 Mac下直接双击go1.13.3.darwin-amd64.pkg,一路下一步安装即可 三 测试安装 1、创建工作目录 C:>Go_Project。 2、 创建文件test.go,写入如下代码 package main import "fmt" func main() { fmt.Println("Hello, World!") } 3、打开cmd,切换目录到C:>Go_Project下,执行如下命令: go run test.go 看到打印结果: ...

2019年12月9日 · 2 分钟

【Go】类型

类型 下面是 Go 支持的基本类型: bool 数字类型 int8, int16, int32, int64, int uint8, uint16, uint32, uint64, uint float32, float64 complex64, complex128 byte rune string bool bool 类型表示一个布尔值,值为 true 或者 false。 package main import "fmt" func main() { a := true b := false fmt.Println("a:", a, "b:", b) c := a && b fmt.Println("c:", c) d := a || b fmt.Println("d:", d) } 在上面的程序中,a 赋值为 true,b 赋值为 false。 c 赋值为 a && b。仅当 a 和 b 都为 true 时,操作符 && 才返回 true。因此,在这里 c 为 false。 ...

2019年12月9日 · 4 分钟

【Go】语言介绍

Go语言介绍 Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言。 Go是静态强类型语言,是区别于解析型语言的编译型语言。 解析型语言——源代码是先翻译为中间代码,然后由解析器对代码进行解释执行。 编译型语言——源代码编译生成机器语言,然后由机器直接执行机器码即可执行。 Go语言特性 跨平台的编译型语言 语法接近C语言 管道(channel),切片(slice),并发(routine) 有垃圾回收的机制 支持面向对象和面向过程的编程模式 Go语言发展(版本/特性) 2009年11月7日 weekly.2009-11-06 —— 早期的版本 2012年3月28日 go1 —— 稳定版版的发布 2013年5月14日 go1.1 —— 语言本身的变化、库的变化等。 2013年12月01日 go1.2 —— 提供更好的调度和一个新的语言特性。 2014年6月18日 go1.3 —— 主要是在实现的工作上的变化,以及精准的垃圾回收。 2014年12月10日 go1.4 —— 包含了2个很小的语言变更。 2015年8月19日 go1.5 —— 实现的架构变化,同时保留了和旧版本的兼容性。 2016年2月7日 go1.6 —— 语言本身、运行时、和库的实现的变化。 2016年8月15日 go1.7 —— 标准库有显着的性能改进和变化。 2017年2月26日 go1.8 —— 标准库有显着的性能改进和变化。 2017年8月24日 go1.9 —— 是包含语言,标准库,以及运行时的诸多变化。这个版本中的大部分工作都是对运行时和工具的改进。 2018年2月16日 go1.10 —— 大部分更改都在工具链,运行时和库的实现中。 2018年8月24日 go1.11 —— modules和WebAssembly支持。 Go语言应用 谁在用 Google 这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如:https://github.com/kubernetes/kubernetes ,大家也可以在Github上 https://github.com/google/ 查看更多Google的Go开源项目。 ...

2019年12月9日 · 1 分钟