一文搞懂Go常用语法
2023-03-14 10:11:42来源:程序员升职加薪之旅
本文是根据阳哥 知识星球中的资料 整理的学习笔记,第一章关于Go语言中常见的语法现象。
我的思考:一门语言中的语法都是固定的,基础语法几乎都差不多,本篇文章涉及到 Go 入门脚本,变量,条件语句,函数等语法现象,用一篇文章梳理Go语言中可能出现的所有语言现象,便于初学者学习和复习所用。
一. Go 语言的 helloworld源文件:
【资料图】
文件名:hello.go
package mainimport "fmt"func main() { fmt.Println("helloworld")}
对于第一个代码的解释:
源文件使用 UTF-8 编码,对 Unicode 支持良好,每个源文件都属于包的一部分,在文件头部用 package 声明所属的包名称。以.go作为文件的拓展名相比其他语言,语句结束的分号会被默认省略import是用来导入标准库或者第三方包其他注意事项:
fmt.Println这里的 Println 的p要大写;导入的包,如果有多余的可以删掉可以直接运行:
go run main.go二. 变量
Go 语言中使用 var 定义变量,支持类型推断
1.定义两个变量并输出package mainimport "fmt"func main() { var x int32 var y = "hello,world" fmt.Println("输出的结果为", x,y)}
输出结果:
PS C:\Go\src\test01> Go run .\variable.Go输出的结果为 0 hello,world
注意点:
编译器会把变量的初始值初始化为零,避免出现意外Printf和Pringln是有区别的,不能通用。在函数内部,可以省略 var 关键字,但要注意赋值符号的变化:由 = 变成了 :=
package mainimport "fmt"func main() { y := "hello,world" fmt.Println("输出的结果为",y)}三. 表达式
Go 语言有三种流程控制语句
3.1 if 语句package mainfunc main () { var x = 100 if x >0 { println("x =",x) }else if x < 0 { println("x =",-x) }else{ println("x =",0) }}3.2 switch 语句
package mainfunc main () { x :=100 switch { case x>0: println("x") case x<0: println("-x") //case x!=0: // println("0") case x == 0: println("0") default: println("0") }}
这里需要注意一点:
x=0表示赋值,x==0表示 ```等于``.所以在这个 case 语句中,case x=0:会报错,但可以改为!=不等于 0
执行结果:
3.3 for 语句for 循环的用法比较多,我们来举几个例子:
案例一:package mainfunc main () { //打印0 1 2 3 4 for i:=0 ;i<5;i++{ println(i) } //打印 4 3 2 1 0 for i :=4;i>=0 ;i--{ println(i) }}
下面的 for 循环,类似于 while 循环的例子,比如while(x <5 {})
案例二:package mainfunc main () { x :=0 //打印0 1 2 3 4 for x<5{ println(x) x++ }}
案例三:打印从 10 到 0 的值
package mainfunc main () { x :=10 for { println(x) x-- if x < 0{ break } }}案例四:
有时候也会对列表进行遍历,列表定义:x:= []int{100,101,102}
package mainfunc main () { x :=[]int{100,101,102} for i,n :=range x { println(i,n) }}
在 Go 语言中,遍历数据或切片时可以用 range,range 会产生两个值,分别是数据的索引与值,就像案例四中,i和v分别表示索引和值:
索引为 0 的时候值是 100
运行结果:
四. 函数函数可以定义多个返回值,甚至对其命名
package mainimport ( "errors" "fmt")func div(a,b int) (int,error) { if b == 0 { return 0,errors.New("division by zero") } return a/b,nil}func main(){ a,b := 9,2 //定义多个变量 c,err := div(a,b) //接收多个值 fmt.Println(c,err) fmt.Println(a,b)}
这里遇到一个小插曲,如下图:
发现代码会提示 b 没有定义,在a/b位置有下划线,但执行结果是对的。经过反复排查和沟通,最后发现是 SDK 没有配置
沐风晓月感谢星球群里各位帮助过我的小伙伴。
五. 数据5.1 切片切片可以实现类似动态数组的功能:
package mainimport( "fmt")func main() { x := make([]int ,0,5) //创建容量为5的切片 for i :=0;i<10;i++{ x=append(x,i) //追加数据,如果超过容量,自动分配更大空间 } fmt.Println(x)}
输出结果:
[0 1 2 3 4 5 6 7 8 9]5.2 字典
package mainimport "fmt"func main() { m:=make(map[string]int) //创建字典类型对象 m["a"] =1 x,ok := m["b"] fmt.Println(x,ok) y,ok := m["a"] fmt.Println(y,ok)}
运行结果:
总结本文后续还会持续增加一些语法现象,欢迎大家收藏备用。
本文转载自微信公众号「 程序员升级打怪之旅」,作者「王中阳Go」,可以通过以下二维码关注。
转载本文请联系「 程序员升级打怪之旅」公众号。
关键词: