go基础

go基础01-go简介+hello world

Posted by Hilda on September 15, 2024

go lang标准库文档:https://studygolang.com/pkgdoc (不需要科学上网)

go lang下载:https://studygolang.com/dl (不需要科学上网)

Go简介

Go 语言起源 2007 年,并于 2009 年正式对外发布。它从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关员工利用 20% 的空余时间来参与 Go 语言的研发工作。

  • 2007 年 9 月 20 日的下午,在谷歌山景城总部的一间办公室里,谷歌的大佬级程序员 Rob Pike在等待一个 C++ 项目构建的过程中和谷歌的另外两个大佬级程序员 Robert Griesemer和 Ken Thompson进行了一次有关设计一门新编程语言的讨论。
    • 计算机硬件技术更新频繁,性能提高很快。目前主流的编程语言发展明显落后于硬件,不能合理利用多核多CPU的优势提升软件系统性能。
    • 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。
    • 企业运行维护很多c/c++的项目,C/C++程序运行速度虽然很快(因为采用静态编译),但是编译速度却很慢,同时还存在内存泄露的一系列困扰需要解决。

团队核心人员:

  • Ken Thompson(肯·汤普逊):1983年图灵奖、1998年美国国家技术奖得主,他与Dennis Ritchie是Unix系统的原创者。Thompson也发明了C语言、B语言,同时也是C语言的主要发明人。
  • Rob Pike(罗布·派克): 加拿大人,曾是贝尔实验室的Unix团队和Plan 9操作计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8字符编码。(ps:Go语言的图标-gopher 囊地鼠,是Rob Pike老婆制作的)
  • Robert Griesemer(罗伯特·格里泽默):曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8.

环境搭建

  • 选择工具:vscode
  • SDK下载:
    • 需科学上网:https://go.dev/dl/
    • 无需科学上网:https://studygolang.com/dl
    • 建议选择稳定版本下载,如下图:
    • image-20240915161608652

根据自己的环境选择合适的下载。我选择go1.23.1.darwin-amd64.tar.gz,解压后,目录中有以下内容:

1
2
3
CONTRIBUTING.md	README.md	api		doc		misc		test
LICENSE		SECURITY.md	bin		go.env		pkg
PATENTS		VERSION		codereview.cfg	lib		src
  • api:该目录包含与 Go 语言的 API 相关的信息和定义。它记录了不同版本的 Go 语言所支持的公共 API,方便开发者查看每个版本中的 API 变化。
  • bin:这个目录通常用于存放 Go 编译器和工具的可执行文件。通过安装 Go 语言工具链后,开发者可以使用 bin 目录下的命令行工具如 go
  • lib:该目录包含 Go 运行时所依赖的库文件。开发者在编译 Go 项目时,lib 目录中的库文件会被加载以支持程序的运行。
  • src:这是 Go 语言的核心源码目录,包含了所有 Go 语言的标准库、工具链和核心功能的实现。src 是 Go 语言开发的核心部分,开发者可以在这里查看 Go 语言的源代码。
  • doc:该目录包含 Go 语言的官方文档。开发者可以在这里找到关于 Go 语言的设计文档、用户指南和参考手册等内容,是学习和理解 Go 语言细节的重要资源。

测试SDK环境是否搭建成功:

首先配置环境变量。

查看当前shell是zsh还是bash, 如果是bash选择编辑~/.bash_profile文件,如果是zsh选择编辑~/.zshrc 文件

1
2
(base) apple@appledeMacBook-Pro go %  dscl . -read /Users/$USER UserShell
UserShell: /bin/zsh

需要设置GOROOT, GOPATH, PATH三个环境变量。例如:

1
2
3
4
5
6
7
export GOROOT=/usr/local/Cellar/go/1.16.5/libexec
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

export GOROOT=/Applications/Develop/go_sdk/go
export GOPATH=$HOME/go
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH

GOROOT路径是go的安装路径,一般是/usr/local/go或者 /usr/local/Cellar/go/1.16.5/libexec,如果不知道是安装到了哪个目录可以通过brew list go来查看。

brew list go可以查看go的安装目录(如果你是通过brew来安装的话)

GOPATH是以后打算把包存放的路径,可以随便写一个自己想写的路径。

$GOPATH/bin加入 $PATH 变量,这样在终端的任何路径都能使用go包的bin目录下面的工具,不需要进入到bin目录或者指定目录,比较方便。

最后注意source以下:

1
2
source ~/.bash_profile  # 如果是bash
source ~/.zshrc  # 如果是zsh

测试环境是否安装成功(在任何目录下):

1
2
3
(base) apple@appledeMacBook-Pro go_sdk % go version
go version go1.23.1 darwin/amd64
(base) apple@appledeMacBook-Pro go_sdk %

在vs code中书写一个hello world:

1
2
3
4
5
package main
import "fmt"
func main(){
	fmt.Println("Go!!!")
}

保存然后编译:

1
go build test.go

会生成一个可执行文件:

image-20240915171649363

如果是windows会生成XXX.exe

然后执行:

1
./test

image-20240915171742301

编译+执行的命令:

1
go run test.go

image-20240915171859606

总结:

image-20240915172750159

两种方式的比较:

  • 使用 go build 命令
    • 优点:
      • 生成了一个独立的二进制文件,可以分发到其他环境中运行,无需安装 Go 环境。
      • 编译后执行时不需要再次编译,运行效率较高。
  • 使用 go run 命令
    • 优点:
      • 编译和执行是一体的,不需要生成中间的可执行文件,操作简单。
      • 适合快速测试和开发过程中调试代码。
    • 适合开发阶段的快速调试和测试,省去了中间生成文件的步骤。
    • 缺点:
      1
      2
      
      - 每次执行都需要先编译,运行速度可能比生成二进制文件后执行稍慢。(时间更长)
      - 无法生成可分发的可执行文件,程序只能在安装有 Go 环境的机器上运行。
      

最后关于go语言记录几点:

  • 1..go是文件扩展名
  • 2.严格区分大小写
  • 3.每行结尾不需要分号(java需要),其实是因为go语言会在每行之后自动加分号,这体现go的简洁
  • 4.go编译的时候是一行一行编译的,不建议多行语句写在一行。(如果实在要多行写成一行,就自己加分号,最后一句不用加分号)
  • 5.导包多余或者定义多余的变量(导的包没有用,或者定义的变量没有用)编译不会通过,这也体现了go语言的简洁性

go的注释与代码风格

单行注释://,多行注释:/**/(vs code快捷键是shift+option+a)

代码风格说明:

  • 缩紧

  • 补充:格式化命令gofmt

    1
    2
    
    gofmt test.go    # 不会写入到源文件
    gofmt -w test.go # 会把格式写入到源文件
    
  • 成对编程
  • 注意运算符两边有空格(优美)
  • 以下写法错误:
    • image-20240915174548346
    • 编译会报错:syntax error: unexpected semicolon or newline before {
    • 以上写法CPP和java都是对的,但是go就不行。因为go的设计者希望开发者有统一的代码风格,一个问题尽量只有一个解决方案是最好的。
  • 一行不要超过80个字符