Go语言之基础入门

网站:http://hardyfish.top/

免费书籍分享:

资料链接:https://url81.ctfile.com/d/57345181-61545511-81795b?p=3899

访问密码:3899

免费专栏分享:

MySQL是怎样运行的从根儿上理解MySQL

课程链接:https://juejin.cn/book/6844733769996304392

资料链接:https://url81.ctfile.com/f/57345181-1272304696-1e5528?p=3899

访问密码:3899

架构实战案例解析

课程链接:https://time.geekbang.org/column/intro/281

资料链接:https://url81.ctfile.com/f/57345181-1272420925-8cf0b9?p=3899

访问密码:3899

给程序员的职场情商课

课程链接:https://www.imooc.com/read/62

资料链接:https://url81.ctfile.com/f/57345181-1272447235-571d25?p=3899

访问密码:3899

从0开始学大数据

课程链接:https://time.geekbang.org/column/intro/100020201

资料链接:https://url81.ctfile.com/f/57345181-1313968579-ad89a0?p=3899

访问密码:3899

Go语言优势

语法简洁,相比其他语言更容易上手,开发效率更高;

自带垃圾回收(GC),不用再手动申请释放内存,能够有效避免 Bug,提高性能;

语言层面的并发支持,让你很容易开发出高性能的程序;

提供的标准库强大,第三方库也足够丰富,可以拿来即用,提高开发效率;

可通过静态编译直接生成一个可执行文件,运行时不依赖其他库,部署方便,可伸缩能力强;

提供跨平台支持,很容易编译出跨各个系统平台直接运行的程序。
Java 虽然具备垃圾回收功能,但它是解释型语言,需要安装 JVM 虚拟机才能运行;

C 语言虽然不用解释,可以直接编译运行,但是它不具备垃圾回收功能,需要开发者自己管理内存的申请和释放,容易出问题。

而 Go 语言具备了两者的优势。
微服务和云原生已经成为一种趋势,而 Go 作为一款高性能的编译型语言,最适合承载落地微服务的实现,又容易生成跨平台的可执行文件,相比其他编程语言更容易部署在 Docker 容器中,实现灵活的自动伸缩服务。

第一个Go语言程序

go 复制代码
package main

import "fmt"

func main() {

    fmt.Println("Hello, 世界")

}
$ go run ch01/main.go

Hello, 世界

代码中的 go 是一个 Go 语言开发工具包提供的命令,它和你平时常用的 ls 命令一样都是可执行的命令。

它可以帮助你运行 Go 语言代码,并进行编译,生成可执行的二进制文件等。

run 在这里是 go 命令的子命令,表示要运行 Go 语言代码的意思。
第一行的 package main

代表当前的 ch01/main.go 文件属于哪个包,其中 package 是 Go 语言声明包的关键字,main 是要声明的包名。

在 Go 语言中 main 包是一个特殊的包,代表你的 Go 语言项目是一个可运行的应用程序,而不是一个被其他项目引用的库。

第二行的 import "fmt"

是导入一个 fmt 包,其中 import 是 Go 语言的关键字,表示导入包的意思,这里导入的是 fmt 包,导入的目的是要使用它。

第三行的 func main()

是定义了一个函数,其中 func 是 Go 语言的关键字,表示要定义一个函数或者方法的意思,main 是函数名,() 空括号表示这个 main 函数不接受任何参数。

在 Go 语言中 main 函数是一个特殊的函数,它代表整个程序的入口,也就是程序在运行的时候,会先调用 main 函数,然后通过 main 函数再调用其他函数,达到实现项目业务需求的目的。

第四行的 fmt.Println("Hello, 世界")

是通过 fmt 包的 Println 函数打印 Hello, 世界 这段文本。

其中 fmt 是刚刚导入的包,要想使用一个包,必须先导入。

Println 函数是属于包 fmt 的函数,这里我需要它打印输出一段文本,也就是 Hello, 世界。

第五行的大括号 }

表示 main 函数体的结束。

语言环境搭建

先下载 Go 语言开发包。

可以从官网 https://golang.org/dl/https://golang.google.cn/dl/ 下载(第一个链接是国外的官网,第二个是国内的官网,如果第一个访问不了,可以从第二个下载)。
安装测试

可以打开终端或者命令提示符,输入 go version 来验证 Go 语言开发工具包是否安装成功。

如果成功的话,会打印出 Go 语言的版本和系统信息。

环境变量设置

GOPATH

代表 Go 语言项目的工作目录,在 Go Module 模式之前非常重要,现在基本上用来存放使用 go get 命令获取的项目。

GOBIN

代表 Go 编译生成的程序的安装目录,比如通过 go install 命令,会把生成的 Go 程序安装到 GOBIN 目录下,以供你在终端使用。
假设工作目录为 /Users/flysnow/go,你需要把 GOPATH 环境变量设置为 /Users/flysnow/go,把 GOBIN 环境变量设置为 $GOPATH/bin。

项目结构

采用 Go Module 的方式,可以在任何位置创建你的 Go 语言项目。
假设你的项目位置是 /Users/flysnow/git/gotour,打开终端,输入如下命令切换到该目录下:

shell 复制代码
$ cd /Users/flysnow/git/gotour

然后再执行如下命令创建一个 Go Module 项目:

shell 复制代码
$ go mod init

执行成功后,会生成一个 go.mod 文件。

然后在当前目录下创建一个 main.go 文件,这样整个项目目录结构是:

shell 复制代码
gotour

├── go.mod

├── lib

└── main.go

其中 main.go 是整个项目的入口文件,里面有 main 函数。

lib 目录是项目的子模块,根据项目需求可以新建很多个目录作为子模块,也可以继续嵌套为子模块的子模块。

编译发布

可以编译生成可执行文件,也可以把它发布到 $GOBIN 目录,以供在终端使用。

在项目根目录输入以下命令,即可编译一个可执行文件。

shell 复制代码
$ go build ./ch01/main.go

回车执行后会在当前目录生成 main 可执行文件。

shell 复制代码
$ ./main 

Hello, 世界

如果成功打印出 Hello, 世界,证明程序成功生成。

以上生成的可执行文件在当前目录,也可以把它安装到 $GOBIN 目录或者任意位置,如下所示:

shell 复制代码
$ go install ./ch01/main.go

使用 go install 命令即可,现在你在任意时刻打开终端,输入 main 回车,都会打印出 Hello, 世界。

跨平台编译

Go 语言通过两个环境变量来控制跨平台编译,它们分别是 GOOS 和 GOARCH 。

  • GOOS:代表要编译的目标操作系统,常见的有 Linux、Windows、Darwin 等。
  • GOARCH:代表要编译的目标处理器架构,常见的有 386、AMD64、ARM64 等。

这样通过组合不同的 GOOS 和 GOARCH,就可以编译出不同的可执行程序。

比如操作系统是 macOS AMD64 的,想编译出 Linux AMD64 的可执行程序,只需要执行 go build 命令即可,如以下代码所示:

shell 复制代码
$ GOOS=linux GOARCH=amd64 go build ./ch01/main.go

编辑器推荐

第一款是 Visual Studio Code + Go 扩展插件,通过官方网站 https://code.visualstudio.com/ 下载使用。

第二款是老牌 IDE 公司 JetBrains 推出的 Goland,所有插件已经全部集成,更容易上手,并且功能强大,新手老手都适合,可以通过官方网站 https://www.jetbrains.com/go/ 下载使用。

相关推荐
Kalika0-0几秒前
输出不能被3整除的数-C语言
c语言·开发语言
knoci1 小时前
【Go】-基于Gin框架的IM通信项目
开发语言·后端·学习·golang·gin
RaidenQ1 小时前
2024.9.27 Python面试八股文
linux·开发语言·python
Thomas_YXQ3 小时前
Unity3D PostLateUpdate为何突然占用大量时间详解
开发语言·数码相机·游戏·unity·架构·unity3d
高高要努力3 小时前
SpringBoot日志集成-LogBack
spring boot·后端·logback
Pandaconda4 小时前
【计算机网络 - 基础问题】每日 3 题(二十七)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
禁默4 小时前
C++之stack 和 queue
开发语言·数据结构·c++
Satan7124 小时前
【Java】虚拟机(JVM)内存模型全解析
java·开发语言·jvm
洛小豆5 小时前
前端开发必备:三种高效定位动态类名元素的 JavaScript 技巧
开发语言·前端·javascript·面试
Pandaconda5 小时前
【计算机网络 - 基础问题】每日 3 题(二十四)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展