Go 学习 (一) 第一个go程序 - 含各平台安装Go以及安装不同版本Go

f1.应用场景

学习Go, 储备知识, 后续进行项目服务开发.

同时结合解释性语言, 如PHP, 了解编译型语言的不同之处,

去理解各编程语言的异同, 及其本质, 提高技术领悟,使用, 甚至是改造能力.

2.学习/操作

文档参考

03|配好环境:选择一种最适合你的Go安装方法-极客时间

环境

Windows 10  64位

这里有三台电脑, 即三个环境[公司一台, 家里两台]  环境可能会有些许不同, 但是流程/原理都是相同的. 

另外环境:

Mac Pro

1. 安装

Windows

方式一

使用msi安装包  // 需要能正常访问Google

https://dl.google.com/go/go1.14.2.windows-amd64.msi

默认安装在c:\go

下面是之前安装的go.1.12版本

配置环境变量

GOROOT 是安装路径,  GOPATH是项目路径[后面再说]

Note

系统环境变量 Path默认为自动添加上c:\go\bin   即go的二进制可执行文件的目录

方式二

Zip压缩包  // 解压即是安装, 但是一些环境变量之类需要自己手动添加, 不单单是Go, 其他语言/软件也是一样, 如PHP等

下载此zip文件 并提取到你的自选目录(建议是c:\Go):

https://dl.google.com/go/go1.14.2.windows-amd64.zip  // 下载链接

若你选择了 c:\Go 之外的目录,你必须为你所选的路径设置 GOROOT 环境变量。

将你的Go根目录中的 bin 子目录(例如 c:\Go\bin)添加到你的 PATH 环境变量中。

请确保Path变量生效

测试是否安装成功

一切正常!

如果安装不成功, 多试几次.

http://docscn.studygolang.com/doc/install // 安装文档

Mac

方式也是有二,这里通过下载安装包方式安装

source code dir

即 ~ 用户家目录

安装路径

➜  ~ go env GOROOT
/usr/local/go
➜  ~ go env GOPATH
/Users/kumu/go
➜  ~ 

默认安装路径,以及各种配置都是Go官方推荐的方式。

查看Go的环境变量列表

GO111MODULE=""

GOARCH="amd64"

GOBIN=""

GOCACHE="/Users/kumu/Library/Caches/go-build"

GOENV="/Users/kumu/Library/Application Support/go/env"

GOEXE=""

GOEXPERIMENT=""

GOFLAGS=""

GOHOSTARCH="amd64"

GOHOSTOS="darwin"

GOINSECURE=""

GOMODCACHE="/Users/kumu/go/pkg/mod"

GONOPROXY=""

GONOSUMDB=""

GOOS="darwin"

GOPATH="/Users/kumu/go"

GOPRIVATE=""

GOPROXY="https://proxy.golang.org,direct"

GOROOT="/usr/local/go"

GOSUMDB="sum.golang.org"

GOTMPDIR=""

GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"

GOVCS=""

GOVERSION="go1.17.6"

GCCGO="gccgo"

AR="ar"

CC="clang"

CXX="clang++"

CGO_ENABLED="1"

GOMOD="/dev/null"

CGO_CFLAGS="-g -O2"

CGO_CPPFLAGS=""

CGO_CXXFLAGS="-g -O2"

CGO_FFLAGS="-g -O2"

CGO_LDFLAGS="-g -O2"

PKG_CONFIG="pkg-config"

GOGCCFLAGS="-fPIC -arch x86_64 -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/var/folders/t9/btl9s_gs24322kcq5dy5n2t80000gn/T/go-build205395940=/tmp/go-build -gno-record-gcc-switches -fno-common"

2. 编码工具

推荐使用IDE,  文本编辑器备用.

GoLand  //  从phpstorm 可以初步判断应该挺好用, 但是收费, 可以先试用一个月 [对于新手,推荐使用 GoLand] -- 觉得好用,怎么获取,网上还是有不方法的~

Visual Studio Code  // 还是推荐 -- 对任何语言,只要安装相应地语言扩展就是相应语言的IDE

备注:

以上两个IDE工具, 这里或交叉使用. 只是工具而已, 原则就是那个使用舒服, 用那个.

不过我的电脑上,就安装有两个IDE,不论是针对Go,还是PHP.

另外还有文本编辑器,Sublime,Notepad++

使用 VS Code 的话需要安装Go 扩展. 见下方

3. 第一个go程序

3.1 创建工作目录/配置工作目录变量

上面准备就绪, 就可以直接开始编写第一个 Go 语言程序了

还是遵循编程语言的一贯传统,我们从 Hello World 开始 Go 语言学习之旅.

首先,我们进入用户根目录,并在该目录下创建一个 go 目录,用来存放所有的 Go 语言代码

使用git bash  // 推荐使用, 也可以使用cmd, 有时候会有问题, 只要知道能解决问题即可,

cd ~
mkdir go

之所以在这里位置创建这个目录来存放代码,是因为 Go 语言默认的 GOPATH 环境变量值就是该路径

不管是 Linux、Mac 还是 Windows 都是如此,比如  Windows 系统下可以通过 系统环境变量 界面看到该配置:// 没有, 就自行配置

GOPATH 的用处:

Go 语言在编译程序时,会从 GOPATH 配置的路径里面去查找源文件并完成构建。

3.2 工作目录下, 新建项目目录

即这里在 go 目录下新增一个项目,取名为 test,进入该项目目录,

创建一个 Go 文件 hello.go// 下面是命令上下操作

cd ~/go
mkdir test
cd test
touch hello.go

3.3 书写 hello.go 文件代码

和 PHP 源码存放在 .php 文件类似,Go 语言源码都是存放在 .go 文件中. // 这里先使用文本编辑器打开[sublime或者Windows自带的文本编辑器]

文件内容:

package main

import "fmt"

func main() {
    fmt.Println("hello, world")
}

至此, 一个简单的打印 Hello World 的 Go 代码就写好了.

下面我们简单分析下每一行代码的含义。参见 3.4

3.4 代码解读

和 Java 类似,Go 使用包 [即package] 作为基本单位来管理代码 (可以类比为 PHP 中的命名空间),

每个 Go 源代码文件的开头都是一个 package 声明,表示该文件中 Go 代码所属的包。

包是 Go 语言里最基本的分发单位,也是工程管理中依赖关系的体现。

要生成 Go 可执行程序,必须建立一个名字为 main 的包,并且在该包中包含一个叫 main() 的主函数,该函数是 Go 可执行程序的执行起点,这一点和 C 语言和 Java 语言很像,后续编译 Go 项目程序的时候也要从包含 main 包的文件开始。

Go 语言的 main() 函数不能带参数,也不能定义返回值。

在包声明之后,是一系列的 import 语句,用于导入该程序所依赖的包(可类比为 PHP 中通过 use 引入其它命名空间的类来理解)。

由于本示例程序用到了Println() 函数,所以需要导入该函数所属的 fmt 包。

有一点需要注意,与 Java 和 PHP 不同,在 Go 语言中,不得包含在源代码文件中没有用到的包,否则 Go 编译器会报编译错误.

这与下面的强制函数左花括号 { 的放置位置以及之后会提到的函数名的大小写规则,均体现了 Go 语言在语言层面解决软件工程问题的设计哲学。

所有 Go 函数(包括在面向对象编程中会提到的类型成员函数)都以关键字 func 开头(这一点与 PHP、Java、JavaScript 等语言通过 function 定义函数不同)。

另外在 Go 函数中,左花括号 { 必须函数定义行的末尾,不能另起一行,否则 Go 编译器报告编译错误:

syntax error: unexpected semicolon or newline before {

另外,与 Python、JavaScript 类似,Go 程序并不要求在每个语句后面加上分号表示语句结束,这也是与 PHP、Java 等语言的不同之处。

最后,函数体很简单,就是调用 fmt 包提供的 Println 函数打印「hello,world」这行字符串,Go 语言可以直接通过包名+「.」号引用定义在该包中的函数。

Note

所有的第三方包,大写首字母函数都是已导出的函数,可以使用,如果小写,说明未导出,无法使用

3.5 编译 & 运行程序

对以上代码含义有了大致的了解后,我们接下来要编译并运行第一个 Go 程序,和 PHP 不同,Go 语言是编译型的静态语言(和 Java、C 一样),在运行 Go 程序之前,先要将其编译成二进制可执行文件。

我们可以通过 Go 语言提供的 go build 命令对 Go 程序进行编译,然后运行编译后的可执行文件执行 Go 程序代码:

备注

上面在cmd中,如果使用./hello.exe执行,出现报错, 请去掉 ./

如果在git bash执行,需要加上 ./

可以看到,代码执行成功,打印出了「hello,world

此外,我们还可以通过 go run 命令来达到同样的效果,该命令将 编译和执行 指令合二为一,会在编译之后立即执行相应的可执行文件显示执行结果:// 没有生成hello.exe文件 [可以做测试]

第一个 Go 程序执行结束.

补充

Mac Pro 下

引入第三方库函数,编译&执行:

Call code in an external package, 本地代码中调用第三方库 

 执行命令超时,终止,重新执行,然后可以看到没有下划波浪线警告提示

翻译:不要通过共享内存来交流,而是通过交流来共享内存。

先编译

go build main.go

执行可执行文件

详情参见:

零基础入门(一):第一个 Go 程序 | 快速入门 | Go 入门教程

4. 命令行工具 // 交叉使用

Windows

cmd / power shell

git bash

Mac 

Terminal

5. 代码入门教程

GitHub - Go-zh/tour: Go 语言官方教程中文版

Go 语言之旅 --- 已经大致过了一遍,很快地,有些地方也是不理解,但是第一遍不要紧,后面再继续深入理解,实践即可~

后续补充

...

3.问题/补充

1. 初始化go 项目的module 名

go mod init hello

2. 设置环境变量中的代理地址为 https://goproxy.io,以便可以通过该地址加速依赖包下载

go env -w GO111MODULE=on GOPROXY=https://goproxy.io

设置之前

设置之后

有不清楚的地方,查看帮助命令说明即可

go help

go help env

我们讲解了 Go 的一些常用配置项的功用,对于中国地区的 Go 开发者而言,你在真正使用 Go 构建应用之前,唯一要做的就是配置 GOPROXY 这个 Go 环境变量

多试试即可

备注:

GOPROXY由于国内的网络环境,我们可以通过配置GOPROXY避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建。

Linux
1.13及以上版本
 go env -w GOPROXY=https://goproxy.cn,direct
其它
 export GOPROXY=https://goproxy.cn

Mac

更改GOPROXY环境变量的终端命令行:
export GOPROXY="https://goproxy.cn,direct"

或者

go env -w GOPROXY=https://goproxy.cn,direct


Windows cmd
go env -w GOPROXY=https://goproxy.cn,direct

3. 安装不同版本

陈彬:Tony老师
$go get golang.org/dl/go1.15.13
这个是不是已经不能用了,改成了:
$go install golang.org/dl/go1.15.13@latest

作者回复: 是的。如果用的是go 1.17版本,那么从go 1.17开始, go get不再承载go install功能了。写这篇稿子的时候,go 1.17还没有发布。用的是go 1.16。

4.参考

http://docscn.studygolang.com/doc/install // 安装文档

Go - 学习/实践_william_n的博客-CSDN博客  // Go

03|配好环境:选择一种最适合你的Go安装方法-极客时间

后续补充

...

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值