本文最后更新于:2024年4月25日 上午
基础语法
先来一手经典开局
1 2 3 4 5 6 7 8 9 10 package mainimport "fmt" func main () { fmt.Println("Hello World!" ) }
变量声明
GO
语言为强类型语言,没有隐式类型转换
🍕全局变量
1 2 var a int = 1 var b float64 = 1.0
变量有初始值声明时可不加类型GO
会自动指定类型(不可更改类型)
1 2 var a = 1 / 3 var b = 1.0 / 3
若不负初值则必须带类型(会赋予该类型的默认值)
GO
还支持同时声明多变量
1 2 3 4 5 var ( name string = "Jonathan" gender bool age = 20 )
🍕局部变量
局部变量指在函数语句块内声明的变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package mainimport "fmt" func main () { var ( name string = "Jonathan" gender bool = true age = 20 ) fmt.Println(name, gender, age) }
对于局部变量 还支持精简的声明方法
1 2 3 4 5 6 7 8 func main () { name := "Jonathan" gender := true age := 20 fmt.Println(name, gender, age) }
🍕常量
使用const
关键字替换var
即可定义常量
类型
☘️基础类型
整数 : int
, int
默认值0
浮点数 :
默认值0
布尔 :bool
默认值false
字符串 :
默认值""
使用双引号
☘️数组与切片
GO
中数组长度不可改变
len()
函数可以获取数组长度
1 2 3 4 5 var students [5 ]string students[0 ] = "foo" fmt.Println(students[0 ])
初始化数组 (字面量声明)
1 students := [5 ]string {"foo" , "bar" , "baz" , "" }
切片是可以改变长度的数组(长度只可增加)
切片可用make
方法创建接受3个参数
Type
: 存储类型
size
: 初始化长度
add
: 可选,可能会增长到的长度(可以在扩容时提升性能,不用重新划分空间)
append
方法可以在原数组后添加元素
1 2 3 4 5 6 7 8 9 package mainimport "fmt" func main () { students := make ([]string , 5 , 7 ) students = append (students, "foo" , "bar" ) fmt.Println(students) }
cap
函数可以获取切片不重新申请空间的可用容量
初始化切片 (字面量声明)
1 students := []string {"foo" , "bar" }
☘️哈希表
map[type1]type2
使用make
函数创建哈希表
1 2 3 4 5 user := make (map [string ]string ) user["name" ] = "Jonathan" user["age" ] = "20"
初始化map (字面量声明)
1 2 3 4 user := map [string ]string { "name" : "Jonathan" , "age" : "20" , }
delete
函数删除某个键值对
☘️结构体
1 2 3 4 5 6 7 8 9 10 11 type User struct { name string age int } user := User{ name: "Jonathan" , age: 20 , } fmt.Printf("%+v" , user)
使用.
运算符获取结构体键值
☘️类型别名
☘️指针
流程控制语句
🛠️选择语句
GO
的流程控制语句都不需要括号,但必须有花括号{}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package mainimport "fmt" func main () { gender := true var res string if gender == true { res = "This is a boy." } else if gender == false { res = "This is a girl." } else { res = "TypeError" } fmt.Println(res) }
🛠️循环语句
GO
只有for
关键字
1 2 3 4 5 6 7 8 9 10 package mainimport "fmt" func main () { for i := 0 ; i < 10 ; i++ { fmt.Print(i, " " ) } }
使用for
实现while
1 2 3 4 5 6 7 8 9 10 11 12 13 package mainimport "fmt" func main () { i := 0 for i < 10 { fmt.Print(i, " " ) i++ } }
🛠️switch语句
GO
中的switch
不在需要break
退出
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package mainimport "fmt" func main () { role := "User" switch role { case "User" : fmt.Println("Happy Day!" ) case "Manager" : fmt.Println("Welcome!" ) default : fmt.Println("Unknown!" ) } }
switch
还支持逻辑表达式来选择,也可不写select变量
fallthrough
语句会直接执行下一case
使用fallthrough
无论下一条case
是否成立均会执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package mainimport "fmt" func main () { for i := 0 ; i < 10 ; i++ { switch { case i%2 == 1 : fmt.Println(i, "odd" ) case i%4 == 0 : fmt.Println("This is a multiple of 4" ) fallthrough case i%2 == 0 : fmt.Println(i, "even" ) default : fmt.Println("TypeError" ) } } }
函数
func
声明函数
1 2 3 func say (words string ) { }
包管理
第一行有效代码用于声明package
名
import
导入包
其中项目入口文件main.go
声明main
包,并有一个main
函数作为项目执行入口函数
1 2 3 4 5 6 7 package mainimport "fmt" func main () { fmt.Println("Go!" ) }
内置包
fmt
fmt
包提供了许多输入输出方法
1 2 3 4 5 6 7 8 package mainimport "fmt" func main () { fmt.Print("" ) fmt.Println("" ) }
time
time
包提供了处理时间的相关函数
strings
os