zoukankan      html  css  js  c++  java
  • 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接受到了信息,并且继续处理。

  • 相关阅读:
    【leetcode】Binary Search Tree Iterator
    【leetcode】Palindrome Partitioning II
    【leetcode】Best Time to Buy and Sell Stock III
    【leetcode】Best Time to Buy and Sell Stock II
    【leetcode】Longest Consecutive Sequence
    【leetcode】Factorial Trailing Zeroes
    【leetcode】Simplify Path
    【leetcode】Generate Parentheses
    【leetcode】Combination Sum II
    【leetcode】Combination Sum
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/2937163.html
Copyright © 2011-2022 走看看