本文是根据阳哥 知识星球中的资料 整理的学习笔记,第一章关于Go语言中常见的语法现象。
一门语言中的语法都是固定的,基础语法几乎都差不多,本篇文章涉及到 Go 入门脚本,变量,条件语句,函数等语法现象,用一篇文章梳理Go语言中可能出现的所有语言现象,便于初学者学习和复习所用。
源文件:
文件名:hello.go
package mAIn
import "fmt"
func main() {
fmt.Println("helloworld")
}
对于第一个代码的解释:
其他注意事项:
可以直接运行:
go run main.go
Go 语言中使用 var 定义变量,支持类型推断
package main
import "fmt"
func main() {
var x int32
var y = "hello,world"
fmt.Println("输出的结果为", x,y)
}
输出结果:
PS C:Gosrctest01> Go run .variable.Go
输出的结果为 0 hello,world
注意点:
在函数内部,可以省略 var 关键字,但要注意赋值符号的变化:由 = 变成了 :=
package main
import "fmt"
func main() {
y := "hello,world"
fmt.Println("输出的结果为",y)
}
Go 语言有三种流程控制语句
package main
func main () {
var x = 100
if x >0 {
println("x =",x)
}else if x < 0 {
println("x =",-x)
}else{
println("x =",0)
}
}
package main
func 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")
}
}
这里需要注意一点:
所以在这个 case 语句中, case x=0: 会报错,但可以改为!= 不等于 0
执行结果:
for 循环的用法比较多,我们来举几个例子:
package main
func 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 main
func main () {
x :=0
//打印0 1 2 3 4
for x<5{
println(x)
x++
}
}
案例三:打印从 10 到 0 的值
package main
func main () {
x :=10
for {
println(x)
x--
if x < 0{
break
}
}
}
有时候也会对列表进行遍历,列表定义:x:= []int{100,101,102}
package main
func main () {
x :=[]int{100,101,102}
for i,n :=range x {
println(i,n)
}
}
在 Go 语言中,遍历数据或切片时可以用 range,range 会产生两个值,分别是数据的索引与值,就像案例四中,i和v分别表示索引和值:
索引为 0 的时候值是 100
运行结果:
函数可以定义多个返回值,甚至对其命名
package main
import (
"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 没有配置
沐风晓月感谢星球群里各位帮助过我的小伙伴。
切片可以实现类似动态数组的功能:
package main
import(
"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]
package main
import "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)
}
运行结果:
本文后续还会持续增加一些语法现象,欢迎大家收藏备用。