Go

简单说,又好久没有更新了,貌似”死”了一般,2019眼瞅就要过去了,不出意外的发现自己貌似什么都没干。

言归正传,最近再次放假,利用一些时间把Go语言学习一下,这个flag已经立了一年了,才开始初见行动,惭愧。

学习方法

极客时间 Go语言教程Go官方tour教程
个人感觉快速学习基础只是还是官方教程更有效一些,如同当年学习Python一样,官方教程还是直接一些。

我的发现

列出几个个人认为的Go语言特点,也是总结,帮助自己和他人更好的理解Go语言

  • 类型位置后移,例如变量,方法返回值类型,与常见语言相比,类型的位置都后移了

    1
    var i int
  • 切片(slice)需要认真理解,它是一个特殊的结构,底层直接操控不可变的数组。目前来看,大多情况应该使用slice而非array
    切片的快速生命和python的数组截取很想,但是本质完全不一样,python是生成了新的数组对象空间,可以说是新的副本,修改不会印象原始数据
    Go的切片不是,他是一个array的抽象引用结构,对切片的操作直接会影响原始数据

  • Go有指针,但不能像C++那样做指针操作,他只能用于传递调用

  • Go没有类,只有结构体。我们可以给结构体类型或自定义类型添加方法,其便利性在于,Go语言会自动做指针和对象的转换,比起普通方法更加灵活。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    package main

    import "fmt"

    type Vertex struct {
    X, Y float64
    }

    // 类方法
    func (v *Vertex) Scale(f float64) {
    v.X = v.X * f
    v.Y = v.Y * f
    }

    // 普通方法
    func ScaleFunc(v *Vertex, f float64) {
    v.X = v.X * f
    v.Y = v.Y * f
    }

    func main() {
    v := Vertex{3, 4}
    v.Scale(2)
    ScaleFunc(&v, 10)

    p := &Vertex{4, 3}
    p.Scale(3)
    ScaleFunc(p, 8)

    fmt.Println(v, p)
    }

结束语

这个文章烂尾了,其实是没有开始就结束了。😛