• Go知识点


    基础:

    1、变量赋值

    2、常量赋值,itoa使用

    3、string

    4、循环和选择结构

    5、switch语句

    6、array, slice和map

    函数:

    7、函数格式

    8、函数可以返回多个返回值

    9、defer的使用(在函数退出时调用

    10、panic,recover和defer

    1、变量赋值

    var a
    
    a = 12
    a := 12
    a,b :=12,23

    2、常量赋值,itoa使用

    const(
      a = iota
      b
    )

    3、string

    go中string是常量,只能用双引号来表示。

    a := "this is string"

    a[0] = 'c' (这个是错误的,会报错)

    如果要做上面的操作应该这样:

    a := "this is string"
    c := []bytes(a)
    c[0] = 'c'
    d := string(c)

    4、循环和选择结构

    go中没有do while,循环结构只有for。选择结构有if和switch

    if语句

    if err := file.Chmod(777); err != nil {
      return err
    }

    切结:左括号必须和if在同一行,因此

    if err := file.Chmod(777); err != nil
    { //这个在Go语句中是非法的
        return err
    }

    for循环

    sum := 0
    for i := 0; i < 10; i++ {
        sum += i
    }
    list :
    = []string{"aaa", "bbb", "ccc"} for _,v := range list{ fmt.Print("%s", v) }

    //这里使用了一个range,key和value分别是int和string类型,key是序号,从0开始,value是值

    5、switch语句

    switch和其他语言差不多,只有一个,它不需要break,查询到一个满足条件的,执行,然后跳出

    switch a {
        case "test1":
            fmt.Print("test1")
        case "test2","test3":
            fmt.Print("testOhter")
        default:
            fmt.Print("NoTest")
    }

    6、array, slice和map

    array就是平时使用的数组,和C语言中的数组是一样的

    var a [10]int
    a[0] = 1
    a[1] = 2

    二维数组:

    a := [2][2]int{{1,2}, {3,4}}

    slice和array接近,slice理解为array的指针,使用make进行内存分配

    sl := make([]int, 10)

    array和slice的转换的说明使用摘录《学习go语言》的一段:

    想要扩展slice,append和copy两个内建函数。

    (PS:区别内建函数和第三方库函数的区别是,内建函数是小写字母开头,如copy(),第三方库函数是首字母大写,如fmt.Print())

    map结构是一个hash映射

    ages := map[string]int {
        "lili" : 13,
        "nick":23,
        "jacky":55,
    }

    这里注意一下,很多语言在列出这样结构的时候,最后一个逗号往往都要求省略(55后面的逗号),但是Go语言中这个逗号是必须的。

    7、函数格式

    func GetMsg(i int) (r string) {
        fmt.Println(i)
        r = "hi"
        return r
    }

    func说明这个是个函数

    GetMsg是函数名

    (i int) 函数接收一个int参数

    (r string) 函数返回一个string类型返回值

    8、函数可以返回多个返回值

    func GetMsg(i int) (r string, err string) {
        fmt.Println(i)
        r = "hi"
        err = "no err"
        return r,err
    }

    9、defer的使用

    defer的意思是"在函数退出时调用",特别用于对文件进行读写操作的时候,需要在open之后要调用close操作,将close操作使用defer

    func ReadFile(filePath string)(){
        file.Open(filePath)
        defer file.Close()
         
        if true {
            file.Read()
        } else {
            return false
        }
    }

    这样写的意思是在file.Open后不立即调用close,当return false的时候调用file.Close().这样就有效避免了C语言中的内存泄露问题。

    10、panic,recover和defer

    Panic和Recover我们就将他们看成是其他语言中的throw和catch

    例子:

    package main
     
    import "fmt"
     
    func main() {
        f()
        fmt.Println("Returned normally from f.")
    }
     
    func f() {
        defer func() {
            if r := recover(); r != nil {
                fmt.Println("Recovered in f", r)
            }
        }()
        fmt.Println("Calling g.")
        g(0)
        fmt.Println("Returned normally from g.")
    }
     
    func g(i int) {
        if i > 3 {
            fmt.Println("Panicking!")
            panic(fmt.Sprintf("%v", i))
        }
        defer fmt.Println("Defer in g", i)
        fmt.Println("Printing in g", i)
        g(i + 1)
    }

    返回了:

    Calling g.
    Printing in g 0
    Printing in g 1
    Printing in g 2
    Printing in g 3
    Panicking!
    Defer in g 3
    Defer in g 2
    Defer in g 1
    Defer in g 0
    Recovered in f 4
    Returned normally from f.

    Panic抛出了信息,并且跳出函数。Recover接受到了信息,并且继续处理。

  • 相关阅读:
    C#连接Oracle数据库的连接字符串
    Oracle
    SQL 计算某月有多少天
    七牛开发者文档中心
    ocrstyle
    Linux的sys接口和proc接口创建
    BusHelper
    MeiTuanLocateCity
    Shop
    Win10预览版10162全新安装及激活全过程图解
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/2937163.html
Copyright © 2020-2023  润新知