1. Go 基础
package main //每一个go文件开头都应该声明包名,一个go项目需要有一个main包
import ( //导入该go文件依赖的外部包
"fmt"
)
func main() { //main是一个特殊函数,是程序的主入口
}
2. Go 变量
声明变量的三种方法
2.1 单个变量声明
var age int //变量声明,不赋值,需要指明变量类型(int/string/bool/...) Go自动赋予初始化值
var age int = 23 //声明变量并且初始化
var age = 23 //声明变量并且初始化,Go自动推断变量的类型
2.2 多个变量
var a,b int
var a,b int = 2,3
var (
name = "Jack"
age = 20
height int
)
2.3 简洁声明 := 操作符要求左边有未被声明过的变量名
a := 10
name,age := "Jack",20
3. Go 数据类型
3.1 数字
int8 / int16 / int32 / int64 / int 有符号整数
unit8 / unit16 / unit32 / unit64 / unit 无符号整数(正数)
float32 / float64 浮点数
complex64 / complex128 复数
byte 相当于unit8
rune 相当于int32
3.2 字符串
string
3.3 其他
bool
3.4 type
type myString string //type用于声明新的数据类型,myString相当于string的别名
4. Go 常量
const a = 10 //常量在编译时确定,所以不能将函数返回值赋值给常量
const a int = 10
5. 函数
5.1 传入参数需要写明该参数的数据类型,有返回值需要写明该返回值的数据类型
func handler(a int,b string) bool {
...
}
5.2 若传入参数数据类型一致,可以只写最后一个参数的数据类型
func handler(a,b int) bool {
...
}
5.3 无参数无返回值
func handler(){
...
}
5.4 有多个返回值时,需要将多个返回值用括号括起来
func handler(a,b int)(int,int,float64){
...
return var1,var2,var3
}
//命名返回值,return不需要显式返回任何职,默认返回 var1,var2,var3
func handler(a,b int)(var1 int,var2 int,var3 float64){
...
return
}
5.5 空白符_的妙用
以上函数为例,返回了三个数据,空白符_可以丢弃某个返回值
a,b,c := handler(arg1,arg2)
_,b,c := handler(arg1,arg2)
a,_,c := handler(arg1,arg2)
a,_,_ := handler(arg1,arg2)
5.6 可变参数函数 参考链接 https://studygolang.com/articles/12173
如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最后一个参数。
func find(num int, nums ...int) {
fmt.Printf("type of nums is %T\n", nums)
found := false
for i, v := range nums {
if v == num {
fmt.Println(num, "found at index", i, "in", nums)
found = true
}
}
if !found {
fmt.Println(num, "not found in ", nums)
}
fmt.Printf("\n")
}
func main() {
find(89, 89, 90, 95)
find(45, 56, 67, 45, 90, 109)
find(78, 38, 56, 98)
find(87)
}
6. Go 包package的使用
-src //Go工作区
-myproject //项目名
main.go //主入口文件
-package1 //包
tool1.go //包内文件
tool2.go
-package2 //包
dev1.go
dev2.go
在上述项目结构中(-xxx 代表文件夹xxx)
6.1 main.go 文件:
首行应该 声明 package main
应该包含main函数作为程序的主入口
6.2 tool1.go/tool2.go 文件:
首行应该声明 package package1
6.3 dev1.go/dev2.go 文件
首行应该声明 package package2
6.4 包中的函数或变量想暴露给外部使用,必须首字母大写
6.5 引用外部包
main.go 文件:
import (
"fmt"
"myproject/package1"
"myproject/package2"
)
6.6 如何使用外部包的函数/变量
package1.Area()
package1.Pi
6.7 如何导包但不使用包
导包但没有使用该包,在编译时是会报错的,在开发阶段可能会先把包先导入,那如何导包但不使用而不报错呢,巧用空白符_
import (
"fmt"
_"myproject/package1"
)
7. Go init函数
func init(){ //特殊函数,一个文件可以有一个init函数。一般用于检查数据类型是否符合要求
...
}
8. Go if...else语句
跟其他语言不同,Go语言对于if...else语句有严格的语法要求
8.1 if条件语句不需要括号
8.2 else不能另起一行,必须紧跟if的右括号}处于同一行
8.3 哪怕{}里面的执行语句只有一句,{}也不能被忽略
实例1
if i%2==0 {
....
}
实例2
if i==10 {
...
} else {
...
}
9. Go for循环语句
Go只有一种循环语句 就是for循环
实例
for i:=0;i<10;i++ { //一般的循环
...
}
for i<10 { //相当于while循环
}
for { //无限循环,一般情况下不要使用
...
}
break/continue可以与循环配合使用
break 终止循环
continue 跳出当前循环,进入下一个循环
10. Go switch语句
实例1:有表达式
switch num {
case 1:
...
case 2:
...
case 3,4,5:
...
default:
...
}
实例2:无表达式
switch {
case num>=0 && num<=50 :
...
case num>=51 && num<=100:
...
case num>=101:
...
}
实例3:fallthrough
switch语句从上往下检索,当找到满足条件的case便会结束往下检索,fallthrough语句可以让switch继续往下检索
switch {
case num>=0 && num<=50 :
...
fallthrough
case num>=51 && num<=100:
...
case num>=101:
...
}