后端GO语言入门 | 青训营笔记

142 阅读4分钟

关于GO语言的一些入门知识点的归纳与总结

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

程序本身

  1. GO语言的代码是通过来组织的,而之前的语言类如C,C++等都是通过库来组织的。
  2. 每个源文件都以一条package语句开始的,例如 package main 就是将main这个包导入程序中,接着就是导入(import)的包,这样才能使用一些前人定义好的函数。
  3. main这个包比较特殊,它定义了一个独立可执行程序,而main包里的main函数是所有程序的入口,每个程序都是通过main函数开始的。执行的是main函数里的代码,这一点和C++等语言是一样的。
  4. 需要注意的是:GO语言对包的使用有着严格的限制,如果没有用到包里的函数,那么就会发生错误,这就意味着写程序时,不能盲目的添加包,必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。

写代码时的注意点:

  1. GO语言代码结束后无需用";"来代码结束,除非一行上有多条语句,实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响Go代码的正确解析。
  2. 函数的左括号必须与函数名写在同一行并且位于末尾,例如:
func main(){
}
  1. 定义函数前需加上(func),并且函数的返回值是写在参数列表后面的(多个返回值需要加上括号),这一点是与C++等不同
  2. 变量(var),GO语言可以在你不指定参数类型的情况下自主判断,例如:
    var a="hello,world"//编译器会根据=后面的值来判断参数a是什么类型,当然我们也可以自己制定
    var a string=""
  1. 常量(const),在定义数据时加上const修饰,和C++中的一样,修饰完后就不是存在栈区,而是放在常量区
  2. 定义数据类型的时候,数据类型都是写在变量名后面

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{
}

还有好多知识点,就不一一列举了,建议自己去看代码理解,个人觉得看代码更好理解(如果有着其他语言的基础的话,没基础还是去看视频的好)