基本语法 – day 1
变量的定义
/*使用var定义*/ //隐式初始值(初始化为零值) var num1 int var str2 string //显式初始值 var num2 int = 12 var str2 string = "xiaohei" //类型自动推断 var a, b, c = 3, 5, "xiaohei" /*:=方式声明变量*/ f, g := 12, "min"
:=
方式声明变量不适用于包作用域
在包作用域内的每一行必须是以 func
、 package
、 import
、 var
、 const
等关键字开始
内建变量类型
-
bool
、string
-
(u)int
、(u)int8
、(u)int16
、(u)int32
、(u)int64
、uintptr
-
byte
(8bits)、rune
(32bits) -
float32
、float64
、complex64
、complex128
int
和 uint
的大小随操作紫铜变化,在32位系统中是32位大小,在64位系统中是64位大小
complex64
中实部和虚部大小分别为32bits, complex128
中实部和虚部的大小分别为64bits
常量的定义
const a, b = 3, 4 const str string = "min"
当常量没有显示声明类型时,可以当做各种类型使用(也可以声明为特定的类型)
枚举类型
const ( cpp = 0 java = 1 python = 3 )
const
中可以使用 iota
自增赋值
const ( cpp = iota java python )
iota
会每行自增一次,而不管是否使用
iota
可以放到表达式中进行计算,然后再赋值
条件语句
golang
中的条件语句包括 if
和 switch
if
语句
if statement; condition { // ... }
or
if condition { // ... }
读文件: contents, err := ioutil.ReadFile(filename)
switch
语句
//在switch后进行条件判断 switch coinflip() { case "heads": heads++ case "tails": tails++ default: fmt.Println("landed on edge!") }
or
//在case中进行条件判断 x := 12 switch { case x > 0: return +1 default: return 0 case x < 0: return -1 }
golang
中的switch中不需要break语句,默认不会执行下一个case;当需要执行下一个case时需使用 fallthrough
语句
循环语句
golang
中的循环语句只有 for
一种
for init; condition; post { //... }
golang
中 for
循环中的init、condition、post都可以省略,以此实现 while
循环和死循环
函数
func div(a, b int) (int, int) { //... } func div2(a, b int) (q, r int) { //... }
向函数作为参数传入:
func apply(op func(int, int) int, a, b int) int { //... }
可变参数列表:
func sum(numbers ...int) int { //... }
指针
golang
中的指针不可以运算
var a int = 2 var pa *int = &a *pa = 3 //now a's value is 3
golang
中函数参数的传递方式只有 值传递
一种