Table of Contents
Toggle1. 变量定义方法
1.1 var定义变量
- var 变量名 类型 = 表达式
var name string = “suifengerzai”
var age int = 18
var isOk bool bool
1.2 类型推导方式定义变量
在函数内部,可以使用更简略的 := 方式声明并初始化变量;
短变量只能用于声明局部变量,不能用于全局变量的声明;
- 变量名 := 表达式
n := 18
var age = 18
1.3 一次定义多个变量
package main
import “fmt”
func main() {
var username, sex string
username = “张三”
sex = “男”
fmt.Println(username, sex)
}
1.4 批量声明变量
package main
import “fmt”
func main() {
var (
a string
b int
c bool
)
a = “张三”
b = 18
c = true
fmt.Println(a,b,c)
}
2. 常量定义
声明了 pi 和 e 这两个常量之后,在整个程序运行期间它们的值都不能再发生变化。
const pi = 3.1415
const e = 2.7182
//多个常量也可以一起声明
const (
pi = 3.1415
e = 2.7182
)
- const同时声明多个常量时,如果省略了值,则表示和上面一行的值相同。
const (
n1 = 18
n2
n3
)
// 上面示例中,常量 n1、n2、n3 的值都是 18
3. fmt包
Println:
- 一次输入多个值的时候,Println中间有空格
- Println会自动换行,Print不会
Print:
- 一次输入多个值的时候,Print中间没有空格
- Print不会自动换行
Printf:
- Printf是格式化输出,在很多场景下比Println更方便
package main
import “fmt”
func main() {
fmt.Print(“zhangsan”,”lisi”,”wangwu”) //zhangsanlisiwangwu
fmt.Println(“zhangsan”,”lisi”,”wangwu”) // zhangsan lisi wangwu
name := “zhangsan”
age := 18
fmt.Printf(“%s 今年 %d 岁”, name, age) // zhangsan 今年 18 岁
}
4. init函数和main函数
4.1 init函数
- go语言中,init函数用于包(package)的初始化,该函数是go语言的一个重要特性,有如下特征:
- init函数是用于程序执行前做包的初始化的函数,比如,初始化包里的变量等;
- 每个包可以拥有多个init函数;
- 包的每个源文件也可以拥有多个init函数;
- 同一个包中,多个init函数的执行顺序,go语言没有明确的说明;
- 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序;
- init函数不能被其他函数调用,而是在main函数执行之前自动被调用。
4.2 main函数
Go语言程序的默认入口函数(主函数):func main()
函数体用 {} 一对括号包裹
func main{
//函数体
}
4.3 init函数和main函数的异同
4.3.1 相同点
两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
4.3.2 不同点
① init可以应用于任意包中,且可以重复定义多个;
② main函数只能用于main包中,且只能定义一个。
4.3.3 两个函数的执行顺序
① 对同一个go文件的init()调用顺序是从上到下的;
② 对于同一个package中不同文件是按文件名字字符串比较“从小到大”顺序调用各文件中的init()函数;
③ 对于不同的package,如果不互相依赖的话,按照main包中的“先import的后调用”的顺序调用其包中的init();
④ 如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数;
⑤ 如果init函数中使用了println()或者print(),会发现在执行过程中,这两个不会按照我们想象中顺序执行。
这两个函数,官方只推荐在测试环境中使用,对于正式环境不要使用。
5. init()函数介绍
- 在Go语言程序执行时,导入包语句会自动触发包内部init()函数的调用;
- 需要注意:init()函数没有参数也没有返回值;
- init()函数在程序运行时,自动被调用执行,不能在代码中主动调用它。
6. golang中关键字
- var和const:变量和常量的声明
- package and import:导入
- func:用于定义函数和方法
- return:用于从函数返回
- defer someCode:在函数退出之前执行
- go:用于并行
- select:用于选择不同类型的通讯
- interface:用于定义抽象数据类型
- break、case、continue、for、fallthrough、else、if、switch、goto、default:流程控制
- chan:用于channel通讯
- type:用于声明自定义类型
- map:用于声明map类型数据
- range:用于读取slice、map、channel数据