0
点赞
收藏
分享

微信扫一扫

GO语言基础入门(一)

幺幺零 2022-03-11 阅读 80

本篇内容主要是对于Go语言的基础及其相关特殊性语法进行总结。

  1. 不同于Go build, Go run不会创建可执行文件。故在开发阶段,使用命令go run,开发完毕进行分享时,使用Go build。
  2. Go语言在打造之初目的是用于开发高流量生产系统的语言。
  3. 使用Go语言编写的函数中,对参数和返回值的类型都做了声明。
    func addition(x int, y int) int {
        return x + y
    }
  4. 布尔值只能为true和false,0和1是不允许的。
  5. 声明数组时必须指定长度和类型。
    var bele [4]string
    
    bele[0] = "jogn"
  6. strconv包提供了一整套类型转换的方法。
  7. Go负责分配内存和执行垃圾手机,正常的内存使用规则依然适用,但是无须直接管理内存。
  8. 声明变量时如果没有给它指定值,则变量将被赋默认值即零值。所以为确定变量是否已经赋值,不能检查它是否为nil,而必须检查它是否为默认值。
  9. 不能在函数外面使用简短变量声明。
  10. 在变量名签名加上&,获取变量在内存中的地址。
    s := "Hello"
    
    fmt.Println(&s) //内存地址的十六进制
    
  11. 声明常量用const。
    const gree string = "Hello"
  12. 函数return语句返回了多个用逗号分隔的值。在接收的时候同时用逗号隔开,先后对应。
  13. 函数中能够传递可变数量的参数,但是它们的类型必须与函数签名指定的类型相同,并且必须在参数表的最后一个。
    func sumNumber(numbers... int) int {
        total := 0
        for _, number := range numbers {
            total += number
        }
        return total
    }
  14. 具名返回值让函数能够在返回前将值赋给具名变量。
    //func 函数名(参数表)(具名变量 返回类型){
    //    函数体    
    //    具名变量 = 返回值
    //    return 
    //}
    
    func bar(x, y int) (a, b, c int){ //具名返回值
        sum, sub, mul = x+y, x-y, x*y
        return   //裸返
    }
    
    func main(){
        d, e := 13, 2
        fmt.Println(bar(d,e)) // 15 11 26
    }
  15. 递归函数最少有两个return,在结尾ruturn中调用自己,在函数体中设定条件后return结果。
  16. Go将函数视为一种类型,因此可将函数赋给变量,以后通过变量来调用他们。
    func an(f func() string) string{
        return f()
    }
    
    func main() {
        fn := func() string{
            return "function called"
        }
        fmt.Println(an(fn))
    }
  17. switch语句支持在其他case条件都不满足时将执行的default case。
    s := "c"
    
    switch s {
        case "a":
            fmt.Println("xx")
        case "b":
            fmt.Println("xx")
        default:
            fmt.Println("xx")  
    }
  18. for语句遍历数据结构展示。
    numbers := []int(1, 2, 3, 4)
    for i, n := range numbers {
        fmt.Println("the index of the loop is", i)
        fmt.Println("the value from the array is", n)
    }
  19. defer能够让在函数返回前执行另一个函数。
    func main(){
        defer fmt.Println("1")
        fmt.Println("2")
    } // 输出 2 1
    
  20. 打印数组的所有元素,可使用变量名本身。
  21. 切片类似于数组,但是可以在切片中添加和删除元素。
    func main(){
        var che = make([]string, 2)
        che[0] = "1"
        che[1] = "2"
        che = append(che, "3") //1 2 3
        che = append(che[:2], che[2+1:]...) //1 2  删除索引2
        var s = make([]string, 2)
        copy(s, che) //复制切片
    }
  22. 映射是键-值对集合,相当于python中的字典。
    var p = make(map[string]int)
    
    p["c"] = 2
    delete(p, "c")
  23. 通过使用结构体,可在单个变量中存储众多类型不同的数据字段。
    type mo struct{
        name string
        rating float64
    } //定义一个mo结构体
    
    var xx mo 
    
    xxx := mo{"x", 10}
  24. 当字段很多时,让每个字段独占一行能够提高代码的可维护性和可读性,但是值得注意的是,在这种情况下最后一个数据字段所在的行也必须以逗号结尾。
    xxx := mo {
        name: "x",
        rating: "12",     
    }
  25. 要访问内嵌结构体的数据字段,可使用点表示法。
  26.  
    go语言中的零值
    类型零值
    布尔型false
    整形0
    浮点型0.0
    字符串" "
    指针nil
    函数nil
    接口nil
    切片nil
    通道nil
    映射nil
  27. Go语言设有提供自定义默认值的内置方法,可以使用构造函数实现。
    type Al struct {
        Time string
        Sound string
    }
    
    func NewAl(time string) Al {
        a := al{
            Time: time,
            Sound: "xdx",
        }
        return al
    }
    //不直接创建结构体Al,而是使用函数NewAl来创建,从而让字段Sound包含自定义的默认值。
  28. 对结构体进行比较,要先看它们的类型和值是否相同。对于类型相同的结构体,使用==来比较,对于类型不同的结构体,则会导致编译错误。
  29. 要导出结构体及其字段,结构体及其字段的名称都必须是以大写字母打头。
  30. 通过声明方法,让结构体的任何实例都可以使用。
    type Mo struct {
        Name string
        Rating float64 
    }
    
    func sum(m *Mo) string {
        //code
    }
    
    xx := {"sd","2.3"}
    
    xx.sum() //方法的调用
    
  31. 任何数据类型都可有相关联的方法集。方法集可包含的方法数量不受限制,这是一种封装功能和创建库代码的有效方式。
  32. 指针和值之间的差别很微妙,但选择使用指针还是值这一点很简单:如果需要修改原始结构体,就使用指针;如果需要操作结构体,但不想修改原始结构体,就使用值。
  33. 接口描述了方法集中的所有方法,并指定了每个方法的函数签名。
  34. 接口是方法集的蓝本,要使用接口,必须先实现它。
  35. 函数签名相同的条件(函数名、参数、返回值的类型、个数和顺序都相同)。
  36. 接口也是一种类型,可作为参数传递给函数。
  37. Go语言没有提供类和类继承等面向对象功能,但结构体和方法集弥补了这部分不足,提供了一些面向对象元素。
  38. 接口以声明的方式提供了多态,因为接口描述了必须提供的方法集以及这些方法的函数签名,如果一个方法集实现了一个接口,就可以说它与另一个实现了该接口的方法集互为多态。
  39. 严格的说,方法和函数的唯一差别在于,方法多了一个指定接受者的参数。

举报

相关推荐

0 条评论