从 C 到 golang (1)

变量和流程控制

变量的声明

var i int
var i,j int = 1,2
var c,python,go = true,false,"no!"

函数体能明确类型可以使用:=声明
k := 3

基本数据类型

bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
    // 表示一个 Unicode 码点

float32 float64

complex64 complex128

默认空值

数值为0,布尔为false,字符串为""

强转括号括变量,且不同类型转换需要显示转换

i := 42
f := float64(i)

以大写开头的变量才是公共Public的,小写的为protected,只能在内部使用,比如以下的Pi

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Pi)
}

以下两行声明等同

x int, y int
x, y int

返回值可以在函数顶部命名,并直接用return返回

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

for循环的写法

sum := 0
for i := 0; i < 10; i++ {
    sum += i
}

go中只有for循环,while也以for的方式实现

i := 0
for i < 2000 {
    i += i
}

以for实现无限循环

for{
    //根本停不下来
}

条件语句同样没有小括号,且可以实现一个简单的语句

i := true
if i {
    //do something
}

if j := math.Pow(2,4); j < 5{
    //do something
}

switch语句自动添加break,如果要延续,要添加关键字fallthrough

switch条件中同样可以添加简单语句

switch os := runtime.GOOS; os {
    case "darwin":
        fmt.Println("OS X.")
    case "linux":
        fmt.Println("Linux.")
    default:
        // freebsd, openbsd,
        // plan9, windows...
        fmt.Printf("%s.\n", os)
    }

或者

os := runtime.GOOS
switch os {
    case "darwin":
        fmt.Println("OS X.")
    case "linux":
        fmt.Println("Linux.")
    default:
        // freebsd, openbsd,
        // plan9, windows...
        fmt.Printf("%s.\n", os)
}

没有条件的switch默认为true,可以用来实现if,else逻辑

switch{
    case a < 12:
        //等价于 if a < 12
    case a < 17:
        //等价于 else if a < 17
    default:
        //等价于 else
}

defer 外层函数执行完后再执行,参数会立即求值,defer函数被压入栈中先进后出,

会先输出hello,再输出world

func main() {
    defer fmt.Println("world")

    fmt.Println("hello")
}

标签: go, golang, c

添加新评论