基本语法 – 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
中函数参数的传递方式只有 值传递
一种