这是一篇后端的实践文章,主要介绍Go语言的基础语法,并且对一些常用的特性进行分析,文中出现的所有代码都已经在VS中实现,并且运行成功。
示例代码在 gitpod.io/#github.com… 中,
短链接:hi-hi.cn/gitpod
一、Go语言的特点:
是Goggle出品的一门通用型计算机编程语言,具有以下特点:
1.是高性能、高并发的一门语言,具有与C++、JAVA媲美的性能,不像很多其他的语言用库来支持,也就是说不需要找经过高度性能优化的第三方库来开发应用,是需要使用标准库或者任意基于标准库的第三方库即可开发高并发应用程序;
2.语法简单,语法风格类似于C语言,但是去除了很多繁琐的表示,如:去掉了表达式的括号;循环只有for循环一种就可以实现数值、键值等各种遍历;
3.和PYTHON一样,有着很丰富的、质量有保障的标准库,大部分时候不需要使用第三方库就可以实现开发,标准库有很高的稳定性和兼容性保障,能够享受语言迭代带来的性能优化,这一点是第三方库不能实现的;
4.语言诞生之初就有着丰富的工具链:如编译、代码格式化、帮助检查、代码补充提示,并且内置完整的测试框架,支持单元测试;
5.静态编译:所有结构默认是静态链接的,部署方便快捷 JAVA需要又一个庞大的jre才可以运行
6.快速编译:Go语言用于静态编译里最快的编译速度
7.跨平台:可以在linux、windows、MaxOs上运行,也可以开发安卓、ios软件,还可以在路由器、树莓派上运行。此外,还有很方便的交叉编译特性,可以在自己的电脑上实现二进制的代码,并在路由器上运行,并且不用配置交叉编译环境;
8.带垃圾回收的语言,与java类似,无需考虑内存的分配释放。
二、配置开发环境
1.安装go语言;2.配置go的集成开发环境。
1.浏览器输入 go.dev/ 进入官网,点击download进行安装(如果打不开,可以使用golang中国的镜像 studygoloang.com/dl)
如果访问github的速度非常慢,可以打开goproxy.cn/,按照操作配置即可,配…
2.使用VS,需要安装GO插件;
使用Goland,收费可以免费试用30天,学生可以申请免费的教育许可证,在校期间均可免费试用
三、基础语法
3.1 Hello world
一些解释:
package main 表示文件时main 包的一部分,main包就是程序的入口包,这也就是程序的入口文件
第三行,导入了标准库的fmt 包,这个包主要用于往屏幕输入输出字符串、格式化字符串
第七行开始时main的函数,main 调用了fmt.Println("hello world")来输出hello world
在fmt包中还有很多不一样的函数用于输入输出、格式化,在编辑器中鼠标悬浮在函数上,就可以看到该函数的文档,有一个链接可以跳到pkg.go.dev,可以看到整个包的在线文档,可以从中挑选需要的函数
代码展示如下:
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
若要运行程序, go run hello world.go
想编译二进制的话,可以使用go build进行编译,编译完成后用./hello world就可以运行
若使用示例代码,可以通过以下代码进行运行
go run example/01-hello/main.go
go build example/01-hello/main.go
./main
3.2 go的变量类型
是强类型语言,每个变量都有自己的变量类型,包括bool ,float,int,字符串;
字符串是内置类型,可以用+ =,= 比较两个字符串,+ 直接拼接 如第二十行代码
g := a + "foo"
运算符的使用和优先级大部分和C、C++很类似;
3.3 变量声明
有两种方式:
1. var name = value 会自动推导变量的类型,如
var a = "initial"
有需要也可以显示的写出来
var b,c int = 1, 2
2.变量名:=值
f := float32(e)
以下的一段代码将使用以上两种方式对一些变量进行声明,注意其中的区别:
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)
fmt.Println(g)
}
3.4 常量
把var改成const即可
const s string = "constant"
golang中的常量没有确定的类型,会根据使用是上下文自动的确定类型
package main
import (
"fmt"
"math"
)
func main() {
const s string = "constant"
const h = 500000000000
const i = 3e20 / h
fmt.Println(s, h ,i ,math.Sin(h), math.Sin(i))
}
3.5 if-else
与C很像,不同点是:
1.if后没有括号,写括号的话,保存时编辑器会自动去掉
2.if 后直接加大括号,不可以把if里的语句写在同一行
if 7%2 == 0 {
fmt.Println("7 is even")
}
package main
import "fmt"
func main() {
if 7%2 == 0 {
fmt.Println("7 is even")
}else {
fmt.Println("7 is odd ")
}
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num , "has multiple disgits")
}
}
以上为一段使用了if-else的完整代码,已在VS中实现,并且可以运行,书写时需要仔细注意区别,以免先入为主导致出现错误。
3.6 for循环
只有for循环一种,for里什么都不写就是死循环;
for 条件中的三个任何一个都可以省略
可用continue继续循环,也可以用Break跳出循环
总结
在实际的编写过程中,要十分注意与C++等语言的区别,常常因为熟悉C++的语法而写错。