后端基础Day1 Go入门 | 青训营笔记

95 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天. 初步学习了Golang的发展历史和编程哲学, 了解了Golang的基础类型和常见类型的特性和使用方法. 另外简单学习了一下Go的OOP思想.

基础总结

概述

第一个正式版本的Go语言于2012年3月28日正式发布, 是一门很年轻的语言. 其主要的编程哲学:

  • 部分吸收传统OOP语言的OOP系统特性, 采用结构体的方式实现其他语言的类. 摒弃的地方在于 ①反对函数和操作符重载(overload) ②反对继承/虚函数/虚函数重载 ③放弃构造函数和析构函数
  • 采用侵入式接口, 放弃了如Java中关系繁琐的extends和implements关系
  • 引入函数式编程的特性如匿名函数和闭包
  • 引入Erlang为代表的面向消息编程思想: 即go中的goroutine和channel

基础类型

 布尔类型:bool 整型:int8、byte、int16、int、uint、uintptr等  浮点类型:float32、float64  复数类型:complex64、complex128  字符串:string  字符类型:rune  错误类型:error

复合类型:  指针(pointer)  数组(array)  切片(slice)  字典(map)  通道(chan)  结构体(struct)  接口(interface)

有意思的语言特性

  • :=声明赋值
  • i, j = j, i多重赋值(python)
  • 匿名变量"_"
  • 变量开头大小写表示public或private
  • for独占循环语句, 支持range遍历和无条件for(死循环)

函数

①当前面多个参数类型相同, 可简化为Add(a, b int) ...

②返回值只有一个: Add(a, b int) int

func Add(a int, b int) (ret int, err error) {
    if a < 0 || b < 0 { // 假设这个函数只支持两个非负数字的加法
        err= errors.New("Should be non-negative numbers!")
        return
    }
    return a + b, nil  // 支持多重返回值
}
  • 不定参数

...type的写法是一个语法糖, 即这种语法对语言的功能并没有影响,但是更方便.

即...type实际上是一个切片[]type, 但是如果写成切片, 调用的时候就不得不写成myfunc([]int{xx,xx})

func myfunc(args ...int) {
    for _, arg := range args {
        fmt.Println(arg)
    }
}

interface{}可以传递任意类型的不定参数:

func Printf(format string, args ...interface{}) {
    // ...
}

匿名函数

匿名函数由一个无名的func构成, 可以传给变量:

f := func(x, y int) int {
    return x + y
}
fmt.Println(f(1, 2))

也可以在花括号后面直接调用:

func(x, y int) {
    fmt.Println(x + y)
}(1, 2)

emmm, OOP和视频里的项目明天再写叭😭😭

参考书籍: <<Go语言编程>> -- 许式伟

参考课程: 走进Go语言基础语言 -- 王克纯