Go 语言入门指南:基础语法和常用特性解析|青训营

99 阅读3分钟

一、基础语法

1、Hello World

package main

import (
"fmt"
)

func main() {
fmt.Println("Hello World!")
}

2、变量

package main

import ( "fmt" "math" )

func main() { // Go语言里面声明变量有两种方式: // 方式一:var 变量名 (数据类型)可以自动推断数据类型 var a = "initial"
var b, c int = 1, 2

var d = true

var e float64

// 方式二:用冒等号
f := float32(e)

g := a + "foo" //Go语言里面字符串是内置类型,所以直接用加号连接
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)

// 声明常量的话就是把var改成const即可
// 值得一提的是,golang里面的常量没有确定的类型,它是根据上下文来自动确定类型
const s string = "constant"
const h = 50000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

3、if - else

package main

import "fmt"

func main() {
    /*
        1、if后不用括号,就算加了括号,编辑器也会自动给它去掉
        2、if后的大括号要紧跟其后
    */
    if 7%2 == 0 {
        fmt.Println("7 is even")
    } else {
        fmt.Println("7 is odd")
    }
}

4、循环

package main

import "fmt"

func main() {
    // golang里面的循环只有for循环,没有while和do while
    i := 1
    // 死循环
    for {
        fmt.Println("loop")
        break
    }

    for j := 1; j <= 9; j++ {
        fmt.Println(j)
    }

    for i <= 3 {
        fmt.Println(i)
        i = i + 1
    }

5、switch

package main

import (
    "fmt"
    "time"
)

func main() {
    a := 2
    /*
        switch 后面的变量不用加括号
        golang里面的switch不用加break,执行完某一个case就自动跳出
        相比于C/C++,golang里面的switch更加强大,可以使用任意变量类型,比如:字符串、结构体等。甚至可以用来取代任意的if-else语句
    */
    switch a {
    case 1:
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    case 4, 5:
        fmt.Println("fout or five")
    default:
        fmt.Println("other")
    }

    t := time.Now()
    /*
        可以不用书写变量,直接在case里面书写条件分支,这样的代码,会比多个if-else语句嵌套更加清晰易懂
    */
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }
}

6、数组

package main

import "fmt"

func main() {
    // 实际场景中很少用数组,因为它的长度是固定的
    var a [5]int
    a[4] = 100
    fmt.Println(a[4], len(a))

    b := [5]int{1, 2, 3, 4, 5}
    fmt.Println(b)

    var twoD [2][3]int
    for i := 0; i < 2; i++ {
        for j := 0; j < 3; j++ {
            twoD[i][j] = i + j
        }
    }
    fmt.Println("2d: ", twoD)
}

golang cmd 说明

  • gofmt 格式化代码
  • go run 编译并直接运行程序,它会产生一个临时文件(但不会生成 .exe 文件),直接在命令行输出程序执行结果
  • go build 用于测试编译,检查编译阶段的错误,若为main.go则生成可执行二进制文件
  • go build -race go test -race提供一种竞争检测机制
  • go install 1.将包导入后编译。2.若为可执行文件放入Bin目录下,若为程序放入pkg下
  • go doc|godoc -http=:6000
    1. go doc package function 查询src下的代码注解
    2. godoc -http=:6000 通过web界面访问
  • go env go语言环境配置信息

go slice

  • make([]type,len,cap) 其中len最好指定为0
  • len() cap() 返回切片的存储数据个数与容量
  • append(slice,不定长参数…)
  • append(slice1,slice2)
  • cope(dis,src) 会更具最小的确定

go map

  • make(map[type]type,cap)
  • delete(map,key)
  • value , ok := map[key]