Go语言两种版本的Hello world你会吗
学习一种编程语言,除了基本的语法,更重要的是要了解如何在实际的工程中使用它。本文中,我会和大家一起,从零开始,安装Go语言,配置环境,安装IDE,开发一个Hello World程序。这个Hello World版我会编写两个版本:GOPATH和Go Module版本。
Q:
本教程为什么会编写两个版本?
A:
网上大部分Go语言Hello World都只简单地介绍了GOPATH版本。但是从Go的1.11版本之后,已不再推荐使用GOPATH来构建应用了。也就是说GOPATH被认为是废弃的,错误的做法。
正确的做法是使用Go Module。所以,有必要在教程中将这个信息告诉初学者,引导大家使用推荐的最佳实践方式Go Module。
或许这也是本Hello World教程和网上大部分教程的区别吧。会从开发者的实际使用出发。介绍Go语言的发展历史和最佳实践。
安装Go
使用Go语言开发,第一步肯定是安装Go啦。
第一步:进入Go语言的官网https://golang.org。点击“Download Go”。是的,就是那个傻傻的土拨鼠^_^
第二步:根据操作系统下载对应的软件包进行安装。
Golang对主流的操作系统都有支持,比如Windows,MacOS和Linux等。
本系列教程中,我会使用MacOS操作系统,所以选择下载“Apple macOS”。大家要根据自己的操作系统进行下载。
第三步:安装Go。
在MacOS下安装Go很简单,就是标准的DMG文件安装,直接“下一步”就可以了。
第四步:确认Go是否安装成功。
运行命令“go version”,会输出类似于“go version go1.12.9 darwin/amd64”的内容。请确保包没有任何错误发生。
配置环境
和其他开发语言类似,安装了Go之后,还需要对开发环境进行相应的配置。比如在Java中,需要配置JAVA_HOME,MAVEN等。
Go开发相关的环境变量如下:
● GOROOT:GOROOT就是Go的安装目录。
● GOPATH:GOPATH保存go项目代码。
GOROOT
GOROOT是Go的安装路径。Mac中安装Go会自动配置好GOROOT,路径为/usr/local/go。GOROOT在绝大多数情况下都不需要修改。以下是GOROOT目录的内容(已省略了一些无关信息):
tree -L 2 /usr/local/go ./ ├── bin │ ├── go │ └── gofmt ├── doc │ ├── articles │ └── docs.html ├── src │ ├── errors │ ├── fmt │ ├── log │ └── os
可以看到GOROOT下有bin,doc和src目录。bin目录下有我们熟悉的go和gofmt工具。可以认为GOOROOT和Java里的JDK目录类似。
GOPATH
GOPATH是开发时的工作目录。用于:
● 保存编译后的二进制文件。
● go get和go install命令会下载go代码到GOPATH。
● import包时的搜索路径。
关于GOPATH需要特别注意。在GO的1.11版本之前,GOPATH是必需的,且所有的Go项目代码都要保存在GOPATH目录下。Go的1.11版本之后,GO官方引入了Go Module。使用Go Module管理的项目可以放在GOPATH目录外面。
使用GOPATH时,GO会在以下目录中搜索包:
1. GOROOT/src:该目录保存了Go标准库代码。
2. GOPATH/src:该目录保存了应用自身的代码和第三方依赖的代码。
假设程序中引入了如下的包:
import "github.com/tom/hello-go/foo/bar"
第一步:Go会先去GOROOT的scr目录中查找,很显然它不是标准库的包,没找到。
第二步:继续在GOPATH的src目录去找,准确说是GOPATH/src/github.com/tom/hello-go/foo/bar这个目录。如果该目录不存在,会报错找不到package。在使用GOPATH管理项目时,需要按照GO寻找package的规范来合理地保存和组织Go代码。
Go的这个“将所有代码都放置在GOPATH中”的设计,的确是和其他主流语言很不一样。不管Go官方是出于什么考虑,这个设计在实际使用中,的确给开发者造成了很大的不便和理解上的困难。甚至直接劝退了很多Go的初学者。
万幸的是,Go Module正式发布了。Go Module的发布解决了困扰Go语言长达十年的代码组织,依赖管理问题。
说明:关于GOPATH和Go Module的历史渊源,详细使用,会在另一篇进行说明。本文还是聚焦在Hello World入门。
另外,由于某些原因,Go的某些托管在Google仓库中的代码在国内是无法访问的。如果使用Go Module,我们可以设置GOPROXY,让Go从GOPROXY下载Go代码,速度更快。国内用户可以设置GOPROXY为https://goproxy.cn,使用如下命令来设置GOPROXY:
export GOPROXY=https://goproxy.cn
关于环境配置,总结下来就是:
● 如果使用Go Module(推荐的),设置export GOPROXY=https://goproxy.cn。
● 如果使用GOPATH(遗留的,被废弃的),需要设置GOPATH到本地的某个目录。
安装IDE
目前比较常用的IDE有:
● Visual Studio Code
● GoLand
Visual Studio Code是微软开发的一款开源的,轻量级的文本编辑器。通过安装Go插件,可以用于Go语言的开发。GoLand是JetBrains公司开发的,专业的Go语言开发IDE。
推荐使用GoLand。很多人都说Visual Studio Code更轻量级,但作为一款每天都要重度使用的,需要靠它吃饭的工具,我们需要的是功能全面。尤其是当你需要完备的调试,需要强大的IDE智能辅助功能时,相信你会选择更专业的GoLand。
GoLand的官方主页为https://www.jetbrains.com/go/,点击“Download”即可下载
注意
GoLand使用的是和IntelliJ IDEA一样的框架,是用Java语言开发的。你需要安装Java环境才可以运行GoLand哦。GoLand是收费软件,只有30天的试用期。试用期结束后,需要购买授权。当然在天朝,我们都习惯不花钱用软件。大家可以自行百度或google搜索一下。
Hello World(GOPATH版)
第一步:设置GOPATH
首先设置GOPATH,假设GOPATH设置为$HOME/worspace/go。
第二步:创建子目录
进入$HOME/workspace/go目录。新建子目录src。然后再src中新建子目录hello。在hello目录,新建一个hello-world.go文件:
目录结构应该如下所示:
$HOME workspace go src hello hello-world.go
第三步:创建hello-world.go文件:
package main import "fmt" func main() { fmt.Println("hello world") }
第四步:执行go build
在$HOME/workspace/go目录执行命令:
go build
会生成一个可执行二进制文件:hello。如果是Windows系统,会生成hello.exe文件。
第五步:运行hello文件:
./hello hello world
输出“hello world”。
Hello World(GO Module版)
第一步:创建项目的根目录
任意创建一个目录(可以不在GOPATH中),假设是$HOME/tmp/hello。
第二步:初始化Go模块
执行命令:
go mod init github.com/vangoleo/hello
该命令会将hello目录初始化为一个Go module,并生成一个$HOME/tmp/hello/go.mod文件。内容如下:
module github.com/vangoleo/hello go 1.12
第三步:编写hello.go文件
编写文件$HOME/tmp/hello/hello.go:
package main import ( "fmt" "rsc.io/quote" ) func main() { fmt.Println(quote.Hello()) }
第四步:编辑go.mod文件:
在实际项目中,都会使用到第三方库。可以在Go Module中添加项目的依赖。本例中,我们会添加一个quote依赖,该依赖会打印当前语言的“Hello World”,比如,如果是中文环境,会打印“你好,世界”。
编辑go.mod文件,添加quote依赖:
module github.com/vangoleo/hello go 1.12 require rsc.io/quote v1.5.2
第五步:执行go build
执行go build,会生成可执行文件$HOME/tmp/hello/hello。
第六步:执行hello文件
执行hello文件,输出“你好,世界”。
推荐:go语言教程
Atas ialah kandungan terperinci Go语言两种版本的Hello world你会吗. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Dalam Go, kitaran hayat fungsi termasuk definisi, pemuatan, pemautan, pemulaan, panggilan dan skop pembolehubah dibahagikan kepada tahap fungsi dan tahap blok Pembolehubah dalam fungsi boleh dilihat secara dalaman, manakala pembolehubah dalam blok hanya kelihatan dalam blok .

Dalam Go, anda boleh menggunakan ungkapan biasa untuk memadankan cap masa: susun rentetan ungkapan biasa, seperti yang digunakan untuk memadankan cap masa ISO8601: ^\d{4}-\d{2}-\d{2}T \d{ 2}:\d{2}:\d{2}(\.\d+)?(Z|[+-][0-9]{2}:[0-9]{2})$ . Gunakan fungsi regexp.MatchString untuk menyemak sama ada rentetan sepadan dengan ungkapan biasa.

Dalam Go, mesej WebSocket boleh dihantar menggunakan pakej gorila/soket web. Langkah khusus: Wujudkan sambungan WebSocket. Hantar mesej teks: Panggil WriteMessage(websocket.TextMessage,[]bait("Mesej")). Hantar mesej binari: panggil WriteMessage(websocket.BinaryMessage,[]bait{1,2,3}).

Bahasa Go dan Go adalah entiti yang berbeza dengan ciri yang berbeza. Go (juga dikenali sebagai Golang) terkenal dengan kesesuaiannya, kelajuan penyusunan pantas, pengurusan memori dan kelebihan merentas platform. Kelemahan bahasa Go termasuk ekosistem yang kurang kaya berbanding bahasa lain, sintaks yang lebih ketat dan kekurangan penaipan dinamik.

Kebocoran memori boleh menyebabkan memori program Go terus meningkat dengan: menutup sumber yang tidak lagi digunakan, seperti fail, sambungan rangkaian dan sambungan pangkalan data. Gunakan rujukan yang lemah untuk mengelakkan kebocoran memori dan objek sasaran untuk pengumpulan sampah apabila ia tidak lagi dirujuk dengan kuat. Menggunakan go coroutine, memori tindanan coroutine akan dikeluarkan secara automatik apabila keluar untuk mengelakkan kebocoran memori.

Lihat dokumentasi fungsi Go menggunakan IDE: Tuding kursor pada nama fungsi. Tekan kekunci pintas (GoLand: Ctrl+Q; VSCode: Selepas memasang GoExtensionPack, F1 dan pilih "Go:ShowDocumentation").

Dalam Golang, pembalut ralat membolehkan anda membuat ralat baharu dengan menambahkan maklumat kontekstual kepada ralat asal. Ini boleh digunakan untuk menyatukan jenis ralat yang dilemparkan oleh perpustakaan atau komponen yang berbeza, memudahkan penyahpepijatan dan pengendalian ralat. Langkah-langkahnya adalah seperti berikut: Gunakan fungsi ralat. Balut untuk membalut ralat asal kepada ralat baharu. Ralat baharu mengandungi maklumat kontekstual daripada ralat asal. Gunakan fmt.Printf untuk mengeluarkan ralat yang dibalut, memberikan lebih konteks dan kebolehtindakan. Apabila mengendalikan pelbagai jenis ralat, gunakan fungsi ralat. Balut untuk menyatukan jenis ralat.

Unit menguji fungsi serentak adalah penting kerana ini membantu memastikan kelakuan mereka yang betul dalam persekitaran serentak. Prinsip asas seperti pengecualian bersama, penyegerakan dan pengasingan mesti dipertimbangkan semasa menguji fungsi serentak. Fungsi serentak boleh diuji unit dengan mensimulasikan, menguji keadaan perlumbaan dan mengesahkan keputusan.
