关于GO语言的一些入门知识点的归纳与总结
这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
程序本身
- GO语言的代码是通过包来组织的,而之前的语言类如C,C++等都是通过库来组织的。
- 每个源文件都以一条package语句开始的,例如 package main 就是将main这个包导入程序中,接着就是导入(import)的包,这样才能使用一些前人定义好的函数。
- main这个包比较特殊,它定义了一个独立可执行程序,而main包里的main函数是所有程序的入口,每个程序都是通过main函数开始的。执行的是main函数里的代码,这一点和C++等语言是一样的。
- 需要注意的是:GO语言对包的使用有着严格的限制,如果没有用到包里的函数,那么就会发生错误,这就意味着写程序时,不能盲目的添加包,必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。
写代码时的注意点:
- GO语言代码结束后无需用";"来代码结束,除非一行上有多条语句,实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响Go代码的正确解析。
- 函数的左括号必须与函数名写在同一行并且位于末尾,例如:
func main(){
}
- 定义函数前需加上(func),并且函数的返回值是写在参数列表后面的(多个返回值需要加上括号),这一点是与C++等不同
- 变量(var),GO语言可以在你不指定参数类型的情况下自主判断,例如:
var a="hello,world"//编译器会根据=后面的值来判断参数a是什么类型,当然我们也可以自己制定
var a string=""
- 常量(const),在定义数据时加上const修饰,和C++中的一样,修饰完后就不是存在栈区,而是放在常量区
- 定义数据类型的时候,数据类型都是写在变量名后面
GO中的数据类型
整数类型(int)
定义:
var a int=1
var c,b int=2,3
浮点型(float)
var f float= 3.141592653
g :=1.23456
//上面两种都可以定义浮点型
fmt.Println(f) // 3.141592653
fmt.Printf("%.2f\n", f) // 3.14
自定义类型(type)
与C++中的类以及C中的结构体类似,都是用户自己定义的数据类型
//声明结构体
type user struct {
name string
password string
}
//创建结构体变量以及初始化
a := user{name: "wang", password: "1024"}
b := user{"wang", "1024"}
c := user{name: "wang"}
c.password = "1024"
var d user
d.name = "wang"
d.password = "1024"
//可以当作参数传递给函数
func checkPassword(u user, password string) bool {
return u.password == password
}
func checkPassword2(u *user, password string) bool {
return u.password == password
}
//和C++一样,可以有成员函数
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}
GO中的if else 和 switch case 和 for循环
if else
和C++不一样的是,go语言中if后面可以不需要括号了,并且可以用分号来间隔条件,注意:左括号必须和if在同一行
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
或者
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 digits")
}
switch case
与C++不同的是,每次case完是不需要break的,会自动退出
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
for
for后面的条件如果都不写的话就是死循环
i := 1
for {
fmt.Println("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n%2 == 0 {
continue
}
fmt.Println(n)
}
for i <= 3 {
fmt.Println(i)
i = i + 1
}
for initialization; condition; post {
// zero or more statements
}
*initialization*语句是可选的,在循环开始前执行。*initalization*如果存在,必须是一条*简单语句*(simple statement),即,短变量声明、自增语句、赋值语句或函数调用。`condition`是一个布尔表达式(boolean expression),其值在每次循环迭代开始时计算。如果为`true`则执行循环体语句。`post`语句在循环体执行结束后执行,之后再次对`condition`求值。`condition`值为`false`时,循环结束。
for循环的这三个部分每个都可以省略,如果省略`initialization`和`post`,分号也可以省略:
for condition{
}
还有好多知识点,就不一一列举了,建议自己去看代码理解,个人觉得看代码更好理解(如果有着其他语言的基础的话,没基础还是去看视频的好)