go语言基础 | 青训营笔记

40 阅读3分钟

go语言基础 | 青训营笔记

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

1.go语言变量类型两种声明方式

1.var name = value 自动推导变量类型,也可以在定义中自己声明 2.name:=value 常量使用const 常量没有确定的类型,根据上下文自动确定类型 例:

package main

import (
   "fmt"
   "math"
)

func main() {
   //变量
   var a = "initial"
   var b, c int = 1, 2
   var d = true
   var e float64
   f := float32(e)
   g := a + "foo"
   fmt.Println(a, b, c, d, e, f, g)
   //常量
   const s string = "limengcheng"
   const h = 5000000
   const i = 3e20 / h
   fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

2.选择分支结构

if 条件 没括号{ 语句 } else if 条件{ 语句 } else{ 语句 } 例:

package main

import "fmt"

func main() {
   if 7%2 == 0 {
      fmt.Println("偶数")
   } else {
      fmt.Println("奇数")
   }
   if num := 9; num < 0 {
      fmt.Println("负数")
   } else if num > 10 {
      fmt.Println("两位数以上")
   } else {
      fmt.Println("个位数")
   }
}

3.循环

在go里面没有while循环、do while循环,只有唯一的一种循环,最简单的for循环就是在for后面什么都不写,代表一个死坏,循环途中你可以用break跳出,也可以使用经典的continue跳过

func main() {
	i := 1
	//死循环
	for {
		fmt.Println("loop")
		break
	}
	//for循环
	for j := 7; j < 9; j++ {
		fmt.Println(j)
	}
	//continue break
	for n := 0; n < 5; n++ {
		if n%2 == 0 {
			continue
		}
		fmt.Println(n)
	}
	for i <= 3 {
		fmt.Println(i)
		i = i + 1
	}
}

4.数组和切片

go语言中的数组有两种,一种是静态数组,先定义变量名称然后赋值;另一种为动态数组直接使用make函数开辟空间并不赋值

var myArray1 [10]int
myArray2 := [4]int{1, 2, 3, 4} 
var slice1 []int
slice1 = make([]int, 3)

5.函数和导包

init函数与import

首先我们看一个例子:init函数: init 函数可在package main中,可在其他package中,可在同一个package中出现多次。

main函数

main 函数只能在package main中。

执行顺序

golang里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。

虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。

go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package main就必须包含一个main函数。

程序的初始化和执行都起始于main包。

如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。

当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。

等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:

image.png 具体代码实例为

package main

import (
	_ "golangstudy/import/lib1"      //匿名导包,只导不用
	mylib2 "golangstudy/import/lib2" //给包起别名
	//使用. 将包融入main中,直接使用方法名调用
)

func main() {
	//lib1.Lib1Test()
	mylib2.Lib2Test()
}