从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序

时间:2024-02-17 21:28:53

从零开始学习GO语言-搭建Go语言开发环境-快速开发入门小程序

1-1PPQA9545W

目录

下载地址

Go官网下载地址:https://golang.org/dl/

Go官方镜像站(推荐):https://golang.google.cn/dl/

Go中文官方镜像站(推荐) https://studygolang.com/dl

Go学习群: 760606769

版本的选择

Windows平台和Mac平台推荐下载可执行文件版,Linux平台下载压缩文件版。

1550814038938

软件包的安装 (case windows )

1559119609731

  • Git 客户端,主要go需要用到第三方包,需要用到Git
  • go1.2*.msi 是go的sdk 开发环境
  • VsCode 是开发代码编辑器 推荐使用

以上安装都是默认进行安装

下载链接:https://pan.baidu.com/s/1CKKCnOzdw8A8WgpGaYSewg
提取码:y2ie

Linux下安装

我们在版本选择页面选择并下载好go1.11.5.linux-amd64.tar.gz文件:

wget https://dl.google.com/go/go1.11.5.linux-amd64.tar.gz

将下载好的文件解压到/usr/local目录下:

mkdir -p /usr/local/go  # 创建目录
tar -C /usr/lcoal/go zxvf go1.11.5.linux-amd64.tar.gz. # 解压

如果提示没有权限,加上sudo以root用户的身份再运行。执行完就可以在/usr/local/下看到go目录了。

配置环境变量: Linux下有两个文件可以配置环境变量,其中/etc/profile是对所有用户生效的;$HOME/.profile是对当前用户生效的,根据自己的情况自行选择一个文件打开,添加如下两行代码,保存退出。

export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

修改/etc/profile后要重启生效,修改$HOME/.profile后使用source命令加载$HOME/.profile文件即可生效。 检查:

~ go version
go version go1.11.5 linux/amd64

配置GOPATH

GOPATH是一个环境变量,用来表明你写的go项目的存放路径(工作目录)。

GOPATH路径最好只设置一个,所有的项目代码都放到GOPATHsrc目录下。

Linux和Mac平台就参照上面配置环境变量的方式将自己的工作目录添加到环境变量中即可。 Windows平台按下面的步骤将D:\code\go添加到环境变量:

环境变量

  1. 什么是环境变量

    https://zhidao.baidu.com/question/27053330.html

  2. 为什么需要环境变量

    https://blog.csdn.net/Pre_waist_L/article/details/79696507

安装完成后

1.打开CMD命令 执行

C:\Users\Thinkpad>go version
go version go1.12.5 windows/amd64

C:\Users\Thinkpad>go env
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\Thinkpad\AppData\Local\go-build
set GOEXE=.exe
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOOS=windows
set GOPATH=D:\project
set GOPROXY=
set GORACE=
set GOROOT=C:\Go
set GOTMPDIR=
set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64
set GCCGO=gccgo
set CC=gcc
set CXX=g++
set CGO_ENABLED=1
set GOMOD=
set CGO_CFLAGS=-g -O2
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-g -O2
set CGO_FFLAGS=-g -O2
set CGO_LDFLAGS=-g -O2
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -mthreads -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=C:\Users\Thinkpad\AppData\Local\Temp\go-build378541758=/tmp/go-build -gno-record-gcc-switches

以上输出说明成功安装GO开发环境

其他配置

在我们 GOPATH=D:\project 目录中新建多个目录: src、pkg、bin

MUL

针对上述目录解释说明:

src:存放源代码;

pkg:存放编译完之后的一些静态库(当执行go install时会将一些静态库存放在该目录下)

bin:存放二进制可执行程序文件

GOPATH意义

你知道设置 GOPATH 有什么意义吗?

你可以把 GOPATH 简单理解成 Go 语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。

事实上,由于 Go 语言项目在其生命周期内的所有操作(编码、依赖管理、构建、测试、安装等)基本上都是围绕着 GOPATH 和工作区进行的。

Go项目结构

在进行Go语言开发的时候,我们的代码总是会保存在$GOPATH/src目录下。在工程经过go buildgo installgo get等指令后,会将下载的第三方包源代码文件放在$GOPATH/src目录下, 产生的二进制可执行文件放在 $GOPATH/bin目录下,生成的中间缓存文件会被保存在 $GOPATH/pkg 下。

如果我们使用版本管理工具(Version Control System,VCS。常用如Git)来管理我们的项目代码时,我们只需要添加$GOPATH/src目录的源代码即可。binpkg 目录的内容无需版本控制。

适合个人开发者

我们知道源代码都是存放在GOPATHsrc目录下,那我们可以按照下图来组织我们的代码。

个人开发

适合企业开发者

qiye开啊

Golang语言的特点

简介

Go 语言保证了既能到达 静态编译语言的安全和性能,又达到了 动态语言开发维护的高效率,使用一个表达式来形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 静态语言程序的运行速度,又能达到 Python 动态语言的快速开发。

  1. 从 C 语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值, 指针等
    等,也保留了和 C 语言一样的编译执行方式及弱化的指针

    举一个案例(体验):

    //go 语言的指针的使用特点(体验)
    func testPtr(num *int) {
    *num = 20
    }
    
  2. 引入包的概念,用于组织程序结构,Go 语言的一个文件都要归属于一个包,而不能单独存在。

    1559268073436

  3. 垃圾回收机制,内存自动回收,不需开发人员管理

  4. 天然并发 ( 重要特点)

    1. 从语言层面支持并发,实现简单
    2. goroutine,轻量级线程,可实现大并发处理,高效利用多核。
    3. 基于 CPS 并发模型(Communicating Sequential Processes )实现
    4. 吸收了管道通信机制,形成 Go 语言特有的管道 channel 通过管道 channel , 可以实现不同的 goroute
      之间的相互通信。
  5. 函数可以返回多个值。举例:

    //写一个函数,实现同时返回 和,差
    //go 函数支持返回多个值
    func getSumAndSub(n1 int, n2 int) (int, int ) {
    	sum := n1 + n2 //go 语句后面不要带分号.
    	sub := n1 - n2
    	return sum , sub
    }
    
  6. 新的创新:比如切片 slice、延时执行 defer

Go语言快速开发入门第一个Go程序

1.需求

要求开发一个hello.go程序,可以输出hello world

2.开发的步骤

  1. 开发这个程序/项目时,go的目录结构怎么样处理

    package main  // 声明 main 包,表明当前是一个可执行程序
    
    import “fmt”  // 导入内置 fmt 包
    
    func main(){  // main函数,是程序执行的入口
    	fmt.Println(“Hello World!”)  // 在终端打印 Hello World!
    }
    

    1559268939173

对上图说明

(1) go 文件的后缀是 .go

(2) package main

表示该 hello.go 文件所在的包是 main, 在 go 中,每个文件都必须归属于一个包。

(3) import “fmt”

表示:引入一个包,包名 fmt, 引入该包后,就可以使用 fmt 包的函数,比如:fmt.Println

(4) func main() {

}
func 是一个关键字,表示一个函数。
main 是函数名,是一个主函数,即我们程序的入口。
(5) fmt.Println(“hello”)
表示调用 fmt 包的函数 Println 输出 “hello,world”

3 通过 go build 命令对该 go 文件进行编译,生成 .exe 文件.

1559269162368

4 运行 hello.exe 文件即可

1559269222036

5 注意:通过 go run 命令 可以直接运行 hello.go 程序 [类似执行一个脚本文件的形式]

1559269565362

go build

go build表示将源代码编译成可执行文件。

在hello目录下执行:

go build

或者在其他目录执行以下命令:

go build hello

go编译器会去 GOPATH的src目录下查找你要编译的hello项目

编译得到的可执行文件会保存在执行编译命令的当前目录下,如果是windows平台会在当前目录下找到hello.exe可执行文件。

可在终端直接执行该hello.exe文件:

D:\project\src\gocode.com\day01\helloworld\helloworld.exe
Hello World!

我们还可以使用-o参数来指定编译后可执行文件的名字。

go build -o heiheihei.exe

go install

go install表示安装的意思,它先编译源代码得到可执行文件,然后将可执行文件移动到GOPATH的bin目录下。因为我们的环境变量中配置了GOPATH下的bin目录,所以我们就可以在任意地方直接执行可执行文件了。

跨平台编译

默认我们go build的可执行文件都是当前操作系统可执行的文件,如果我想在windows下编译一个linux下可执行文件,那需要怎么做呢?

只需要指定目标操作系统的平台和处理器架构即可:

SET CGO_ENABLED=0  // 禁用CGO
SET GOOS=linux  // 目标平台是linux
SET GOARCH=amd64  // 目标处理器架构是amd64

然后再执行go build命令,得到的就是能够在Linux平台运行的可执行文件了。

Mac 下编译 Linux 和 Windows平台 64位 可执行程序:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Linux 下编译 Mac 和 Windows 平台64位可执行程序:

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Windows下编译Mac平台64位可执行程序:

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build

Golang 执行流程分析

如果是对源码编译后,再执行,Go 的执行流程如下图

执行-1

如果我们是对源码直接 执行 go run 源码,Go 的执行流程如下图

gorun

两种执行流程的方式区别

  1. 如果我们先编译生成了可执行文件,那么我们可以将该可执行文件拷贝到没有 go 开发环境的机
    器上,仍然可以运行
  2. 如果我们是直接 go run go 源代码,那么如果要在另外一个机器上这么运行,也需要 go 开发
    环境,否则无法执行。
  3. 在编译时,编译器会将程序运行依赖的库文件包含在可执行文件中,所以,可执行文件变大了
    很多

Go 程序开发的注意事项

  1. Go 源文件以 “go” 为扩展名。
  2. Go 应用程序的执行入口是 main()函数。 这个是和其它编程语言(比如 java/c)
  3. Go 语言严格区分大小写。
  4. Go 方法由一条条语句构成, 每个语句后不需要分号(Go 语言会在每行后自动加分号),这也体现出 Golang 的简洁性。
  5. Go 编译器是一行行进行编译的,因此我们一行就写一条语句,不能把多条语句写在同一个,否
    则报错

1559270209528

  1. go 语言 定义的变量或者 import 的包如果没有使用到,代码不能编译通过。

    1559270259568

Go 语言的转义字符(escape char)

​ 说明:常用的转义字符有如下:
​ 1) \t : 表示一个制表符,通常使用它可以排版。

​ 2) \n :换行符
​ 3) \ :一个
​ 4) " :一个”
​ 5) \r :一个回车 fmt.Println(“天龙八部雪山飞狐\r 张飞”);

练习题

要求:请使用一句输出语句,达到输入图形效果

1559270387310

   package main
   
   import "fmt" //fmt 包中提供格式化,输出,输入的函数.
   func main() {
   	//要求:要求:请使用一句输出语句,达到输入如下图形的效果
   	fmt.Println("姓名\t 年龄\t 籍贯\t 地址\njohn\t20\t 河北\t 北京")
   }

现在,开启你的Go语言学习之旅吧。人生苦短,let’s Go.