Go语言简介与详细安装教程

提到Go语言渴望能很多人会觉得很陌生,就像Scala语言一样,是个小众语言,不被广泛认知,其实现在世界上有很多的机器语言,如果让我们都去一一掌握的话也不现实,毕竟人的时间和经历有限。前面也和大家聊过几种语言,比如Scala、python,C、C++等等。。。Java就不多说了,这几种语言都各自有各自的优劣,所以今天iuhe大家说下另一种语言Golang。

Go语言介绍

起初,Golang创造出来是为了来取代C++。最终,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发,不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。

很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方便的得到自己想要的东西。

Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。

Go 语言用途

Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。

对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

Go语言特性

  • 简洁、快速、安全
  • 并行、有趣、开源
  • 内存管理、数组安全、编译迅速

1. 垃圾回收

  • 内存自动回收,再也不需要开发人员管理内存
  • 开发人员专注业务实现,不用分心兼顾其它
  • 只需要new分配内存,不需要释放

2. goroute天然并发

  • 从语言层面支持并发,非常简单;
    使用一个go则在编译时会自动开启一个线程来执行后面的命令/函数/方法,不用像python需要先调用thread模块来开启线程
  • goroute,轻量级线程,创建成千上万个goroute成为可能
  • 基于CSP(Communicating Sequential Process)模型实现

3. goroute线程之间的数据通信——管道。

使用go可以创建一个轻量级的goroute线程,线程之间如何通信,共享数据呢?答案是:使用管道来进行通信。

管道需要定义并创建后,才能使用.

举例:

定义一个管道:

var my_pipe chan int
//my_pipe为管道名,chan为管道关键字表示定义的是一个管道,int表示管道内存储的数据类型

扫描二维码关注公众号,回复: 11644249 查看本文章

创建一个管道:

my_pipe = make(chan int,10)
//make关键字表示开辟一个内存空间,第一个参数表示创建一个管道,10表示管道能存储的数据类型个数,如果超出则阻塞

或者定义和创建合并写:

my_pipe := make(chan int,10)

管道示例:

func main() {

      go pi_pie()

}

func pi_pie() {
  pipe := make(chan int, 10) //make关键字创建一个管道(关键字chan),管道内装int类型的数据,并且管道大小能装10个数字,超过则阻塞
  pipe <- 10               //向管道内放入数据
  pipe <- 9
  pipe <- 9
  pipe <- 7
  pipe <- 6
    
  var p1 int
  p1 = <- pipe //从管道取出数据
  fmt.Println(p1)
  fmt.Println(len(pipe))
}

4. 多返回值

go的函数可以有多个返回值

func main() { 

  x,y := p_fun(10,80) 

  // x,_ := p_fun(10,80) 多返回值函数时,只要一个返回值 

  fmt.Println(x,y) 

}

//多返回值函数 

func p_fun(a int,b int) (int,int) { //函数传入2个整型参数,返回2个值,都为int类型 

  sum := a+b 

  avg := (a+b)/2 

  return sum,avg 

}

5. go文件编码规范

使用gofmt <go文件>使go文件内的代码更规范(缩进等格式更规范),使用gofmt -w <go文件>将原来的go文件修改的更规范

总结Go 语言最主要的特性:

Go语言接受了函数式编程的一些想法,支持匿名函数与闭包。再如,Go语言接受了以Erlang语言为代表的面向消息编程思想,支持goroutine和通道,并推荐使用消息而不是共享内存来进行并发编程。总体来说,Go语言是一个非常现代化的语言,精小但非常强大。

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 错误处理
  • 匿名函数和闭包
  • 类型和接口
  • 并发编程
  • 反射
  • 语言交互性

安装

安装包下载地址https://golang.org/dl/
如果打不开可以使用这个地址:https://golang.google.cn/dl/
以Windows系统和Linux系统为例。
下载对应系统的安装包。

Linux系统下安装

下载下来安装包以后拖到Linux系统的目录中进行解压,还是重命名后放到soft目录下

接下来就是添加环境变量:

vi /etc/profile

export GOROOT=/opt/soft/go  #go的安装目录
export PATH=$PATH:$GOROOT/bin     #go执行命令路径
export GOPATH=/home/user/project/go #项目路径
  • GOROOT:Go 安装后的根目录(例如:C:\Go)
  • GOBIN:Go 的二进制文件存放目录(%GOROOT%\bin)
  • PATH:需要将 %GOBIN% 加在 PATH 变量的最后,方便在命令行下运行。
  • GOPATH : Go 的工作空间,就是我们的开发和依赖包的目录(例如:我的是 D:\Go_Path\go) ,此目录需要手动配置到系 统环境变量。

GOPATH 工作空间是一个目录层次结构,其根目录包含三个子目录:

  • src:包含 Go 源文件,注意:你自己创建依赖的package,也要放到GOPATH 目录下,这样才能够被引用到。
  • pkg:包含包对象,编译好的库文件
  • bin:包含可执行命令

注意:

  1. 需要将GOPATH 路径,手动写入到系统环境变量。
  2. 不要把 GOPATH 设置成 Go 的安装路径。
  3. 你自己创建依赖的package,也要放到GOPATH 目录下,这样才能够被引用到。

激活环境变量

source /etc/profile

Windows系统下安装

下载完对应Windows系统的安装包以后,可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.4.2.windows-amd64.msi)的安装包来安装。
默认情况下 .msi 文件会安装在 c:\Go 目录下。你可以将 c:\Go\bin 目录添加到 Path 环境变量中。添加后你需要重启命令窗口才能生效。就像配置jdk的环境变量一样,只需要在path中添加go的bin目录就行。

查看Go版本

go version

配置好之后,通过 go env 命令来查看go环境是否配置正确:

开发环境搭建(工具为pycharm)

pycharm的go语言开发支持插件下载,我在前面讲过如何使用pycharm下载各种插件,在这里就不多说了;
有时可能因为版本原因,pycharm的在线插件安装可能搜索不到,可以采用本地安装的方法:
插件本地安装包下载页面:

https://plugins.jetbrains.com/plugin/5047-go-language-golang-org-support-plugin (pycharm社区版)
https://plugins.jetbrains.com/plugin/9568-go (pycharm专业版)

根据pycharm的idea版本号(idea版本号在安装目录下的“build.txt/readme.txt”文件中,通常是AA.BBBB.CC的形式)来选择下载插件的版本。

需要注意的是,pycharm的idea号AA.BBBB.CC 只要 AA与网站上的idea号对应上即可,它是一个范围,如idea号172.4343.24就可以下载范围“172.3968-172.*”对应的插件版本。

开发环境搭建(工具为VScode)

1、下载地址:https://code.visualstudio.com/

2、 配置go的环境变量:
前面已经说过Windows如何配置,在这里就要新建GOPATH的变量路径,也就是自己定义的项目的路径
[计算机]–>[属性]–>[高级系统设置]–>[环境变量]–>[新建]

GOPATH 

E:\home\user\project\go

3、在vscode中打开GOPATH所在目录
此时找到main.go按F5, 会报错提示:

Failded to continue:"Cannot find Delve debugger. Install from https://github.com/derekparker/delve & ensure it is in your "GOPATH/bin" or "PATH"
//我们使用go命令行编译调试器

go get github.com/derekparker/delve/cmd/dlv
//将dlv调试器放在GOPATH(工程目录)的bin目录下 

4、在vscode中设置go

vscode的[文件]–>[首选项]–>[设置]

{
 "go.buildOnSave": true,
 "go.buildFlags": [],
 "go.buildTags": "",
 "go.lintOnSave": true,
 "go.formatOnSave": true
 "go.gopath": "E:\\gohmoe",
 "go.goroot": "C:\\go"

}

5、根据提示安装goinit等

6、调试工具delve安装:

mac: brew install go-delve/delve/delve
linux&windows: go get -u github.com/derekparker/delve/cmd/dlv #请确保已经安装了git

注意:
VScode开发的项目路径与环境变量 “GOPATH” 的路径要一致,如 $GOPATH = d:\go_build 那么VScode开发的项目也要在d:/go_build目录下

编译环境和编译流程

编译所需要的目录环境

我们的go项目的开发根目录由 GOPATH 环境变量决定了(范例为:d:/go_build),当我们需要开发项目工程时,需要在根目录下先创建src目录(规定死了);
然后在 src 目录下创建开发的项目名称,如项目名称为app_test, 那么你的go文件应该在d:/go_build/src/app_test目录下进行开发。

当使用,go get github.com/golang/tools相关命令来安装go的开发插件时,默认下载到 GOPATH/src/目录下,也就是在GOPATH/src/目录下,即 GOPATH/src/github.com/golang/tools/…,然后再将该目录下的go文件编译成可执行的二进制文件,放入 $GOPATH/bin 目录下,来使用 go get <github等网址>…。

所以流程是在指定网址下载go文件,到GOPATH/src/目录,然后编程成二进制可执行文件到GOPATH/src/目录,然后编程成二进制可执行文件到GOPATH/bin 目录下,之后可以在IDE开发中直接使用(如调试台)。

编译文件为二进制可执行代码

使用 go build <go文件所在目录>命令,来进行go文件编译

例如:

GOPATH为 d:/go_build时,编译d:/go_build/src/app_store/app.go文件时;
编译的命令为 : go build app_store/app.go则会在当前目录生成app.exe执行文件(Windows)。

注意:

go build时,默认会从$GOPATH/src/ 目录下开始寻找目录,因此只需要相对地址即可

编译go文件为可执行文件并将文件放到指定位置下

go build -o %GOPATH%/bin/calcs.exe app_store/app.go

将go文件编译到GOPATH变量所在目录下的bin目录里面,名称为calcs,后缀为.exe

添加参数 “- o <执行文件路径(含文件名)>” 即可指定编译的文件位置,需要加上文件名和后缀(Windows为.exe;linux可不要)。

插件无法正常安装解决办法:

  1. 执行命令go get github.com/golang/tools
  2. 在GOPATH\src\github.com\golang目录下就有tools文件夹
  3. .在src下和github.com平级新建golang.org文件下,在此文件夹下建x文件夹,然后将tools文件夹都复制进去
  4. 然后再执行go get github.com/tools/godep

此时godep就正常安装在你的GOPATH\bin目录下了。

go的高并发示例:

import "fmt"


func bingfa() {
      for i := 0; i <= 100; i++ {
           go fmt.Println(i) //go关键字即表示开启一个线程(轻量级的线程goroute)
    }
}

示例:

创建工作目录 C:>Go_WorkSpace
test.go 文件代码:

package main

import "fmt"

func main() {

   fmt.Println("Hello, Golang!!")

}

使用 go 命令执行以上文件中代码输出结果如下:

C:\Go_WorkSpace>go run test.go

Hello,  Golang!!

猜你喜欢

转载自blog.csdn.net/zp17834994071/article/details/108504829