这是我参与「第五届青训营 」伴学笔记创作活动的第 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语言基础语言 -- 王克纯