Go语言入门指南
Go语言背景
| Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。自从Go语言由谷歌于2009年11月正式推出,成为开源项目以来,它逐渐成为了软件开发领域中备受关注的编程语言之一。在Go语言的设计中,罗伯特·格瑞史莫(Robert Griesemer)、罗布·派克(Rob Pike)以及肯·汤普逊(Ken Thompson)等资深工程师于2007年开始设计Go,并为其倾注了大量心血。他们的设计理念旨在打造一门简洁、高效、易于学习和使用的语言,以满足现代软件开发的需求。 |
|---|
Go语言常用命令
- go run:用于编译并运行Go程序。只需输入
go run后跟源代码文件名即可。例如,要运行名为main.go的程序,可以键入go run main.go。 - go build:用于编译Go程序。该命令将生成一个可执行文件,其名称与源代码文件名相同(除非你指定了不同的输出文件名)。例如,使用
go build main.go将编译main.go文件,并生成一个名为main的可执行文件。 - go fmt:用于格式化Go代码。通过自动对齐和空格等操作,使代码符合Go语言的官方编码风格。你可以使用
go fmt后跟源代码文件名来格式化单个文件,或者使用go fmt后跟包名来格式化整个包。 - go generate:用于根据现有文件中的指令生成代码。这可以用于生成代码的辅助工具,如[文档]生成器或测试代码生成器。
- go get:用于从互联网上下载或更新指定的代码包及其依赖包。这对于获取第三方库或工具非常有用。例如,要获取一个名为
github.com/user/repo的包,可以键入go get github.com/user/repo。 - go install:用于编译并安装指定的代码包及其依赖包。这将在你的计算机上创建一个可用于其他Go程序的安装包。
- go clean:用于删除执行其他命令时产生的一些文件和目录,如编译后的可执行文件和临时文件。
- go doc:用于打印附于Go语言程序实体上的文档。你可以通过将程序实体的标识符作为该命令的参数来查看其文档。例如,要查看标准库中
fmt包的文档,可以键入go doc fmt。 - go test:用于对Go语言编写的程序进行测试。你可以使用
go test后跟源代码文件名来运行单个测试,或者使用go test后跟包名来运行整个包的测试。 - go list:用于列出指定的代码包的信息。这对于查看已安装包的版本和依赖关系非常有用。
- go fix:用于将指定代码包的所有Go语言源码文件中的旧版本代码修正为新版本的代码。这对于更新旧的代码库到最新Go版本非常有用。
- go vet:是一个用于检查Go语言源码中静态错误的简单工具。它可以检测潜在的逻辑错误和其他潜在问题,并提供有关如何修复这些问题的建议。
- go tool pprof:用于交互式地访问概要文件的内容。概要文件是收集程序性能数据的工具,而
pprof则提供了分析这些数据的工具,帮助[开发者]找出程序的性能瓶颈。
这些命令提供了从编写、调试到发布Go程序的全面支持,使开发者能够更加高效地使用Go语言进行开发
第一个Go程序
任何语言第一个程序肯定是大家熟悉hello world
package main \\包名
import (
"fmt"
)\\引入标准库,这里的‘fmt’库用来进行输入输出。
func main() {
fmt.Println("hello world")
}\\主程序,值得一提'{'不能作为单独一行存在
完成之后我们可以用go run的命令直接执行程序;也可以使用go build来生成一个二进制文件,并使用./的命令执行
标识符
标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(AZ和az)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字,这一点和其他的语言都很相似。
以数字开头或者以关键字及运算符作为标识符是不合法的
常用关键字 | ||||
|---|---|---|---|---|
| break | case | chan | const | continue |
| default | else | defer | fallthrough | for |
| func | go | go to | if | import |
| interface | map | package | return | range |
| select | struct | switch | type | var |
变量与常量
package main
import (
"fmt"
"math"
)
func main() {
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
fmt.Println(g) // initialapple
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}
Go通常使用var关键字生成变量;const关键字生成常量;Go语言可以自动判断变量类型。。以上代码便是常见的变量生成,可以直接定义字符串,也可以定义类型,以及布尔值;当然,Go也可以使用:=进行生成,如变量f。
但是在已经声明的变量不可以再次使用:=进行生成。
在不声明初值时,变量默认是0
循环与条件语句
循环
Go语言提供了for循环语句以及嵌套循环,相比C或者C++更简洁
for j := 7; j < 9; j++ {
fmt.Println(j)
}
循环语句在条件前提上和其他语言不同,但是也是类似于C语言,可以不用添加括号进行条件,如果添加,编译器也会忽略掉并无影响。
Go也提供了三种控制语句
| break | continue | goto |
|---|---|---|
| 中断语句 | 跳出并继续循环 | 跳到指定语句 |
###条件
条件语句同c语言一样,拥有if else和switch select语句可用
同循环语句一样,在条件限制方面,可以不使用括号直接进行判断。
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
有一点是switch语句在有满足条件的值时,只会执行对应的case,不会继续向下执行。
但是Go语言不支持三目运算,不能使用?:进行判断运算
常用特性解析
- 并发编程
Go 语言内置对并发编程的支持,通过使用 Goroutine 和 Channel 可以轻松实现并发编程。Goroutine 是轻量级的线程,可以独立执行函数或方法。Channel 用于在 Goroutine 之间传递数据,保证数据的安全传输。
- 错误处理
Go 语言使用多值返回的方式处理错误,通常最后一个返回值是错误值。通过使用 error 类型和 panic、recover 机制,可以更好地处理错误和异常情况。
- 接口和实现
Go 语言中的接口由方法签名组成,一个类型只要实现了某个接口的所有方法,就被认为实现了该接口。通过接口,可以实现多态和组合等设计模式。
- 结构体和方法
Go 语言中的结构体是一种自定义类型,可以包含多个字段。结构体可以定义方法,从而实现面向对象的编程风格。方法可以通过接收者来调用,支持值接收者和指针接收者两种方式。
- 类型推导
Go语言具有静态类型和类型推导的特性,这使得代码更安全可靠,同时减少了冗余的类型声明。
感谢观看!
We work in the dark and serve the lights, we are assassins.