Python微信订餐小程序课程视频
https://edu.csdn.net/course/detail/36074
Python实战量化交易理财系统
https://edu.csdn.net/course/detail/35475
go基础类
1. go优势
* 天生支持并发,性能高
* 单一的标准代码格式,比其它语言更具可读性
* 自动垃圾收集比java和python更有效,因为它与程序同时执行
go数据类型
int string float bool array slice map channel pointer struct interface method
go程序中的包是什么
* 项目中包含go源文件以及其它包的目录,源文件中的函数、变量、类型都存储在该包中
* 每个源文件都属于一个包,该包在文件顶部使用 package packageName 声明
* 我们在源文件中需要导入第三方包时需要使用 import packageName
go支持什么形式的类型转换?将整数转换为浮点数
* go支持显示类型转换,以满足严格的类型要
* a := 15
* b := float64(a)
* fmt.Println(b, reflect.TypeOf(b))
什么是 goroutine,你如何停止它?
* goroutine是协程/轻量级线程/用户态线程,不同于传统的内核态线程
* 占用资源特别少,创建和销毁只在用户态执行不会到内核态,节省时间
* 创建goroutine需要使用go关键字
* 可以向goroutine发送一个信号通道来停止它,goroutine内部需要检查信号通道
例子:
func main() {
var wg sync.WaitGroup
var exit = make(chan bool)
wg.Add(1)
go func() {
for {
select {
case <-exit: // 接收到信号后return退出当前goroutine
fmt.Println(“goroutine接收到信号退出了!”)
wg.Done()
return
default:
fmt.Println(“还没有接收到信号”)
}
}
}()
exit <- true
wg.Wait()
}
如何在运行时检查变量类型
* 类型开关(Type Switch)是在运行时检查变量类型的最佳方式。
* 类型开关按类型而不是值来评估变量。每个 Switch 至少包含一个 case 用作条件语句
* 如果没有一个 case 为真,则执行 default。
go两个接口之间可以存在什么关系
* 如果两个接口有相同的方法列表,那么他俩就是等价的,可以相互赋值
* 接口A可以嵌套到接口B里面,那么接口B就有了自己的方法列表+接口A的方法列表
go中同步锁(互斥锁)有什么特点,作用是什么?何时使用互斥锁,何时使用读写锁?
* 当一个goroutine获得了Mutex后,其它goroutine就只能乖乖等待,除非该goroutine释放Mutex
* RWMutext在读锁占用的情况下会阻止写,但不会阻止读,在写锁占用的情况下,会阻止任何其它goroutine进来
* 无论是读还是写,整个锁相当于由该goroutine独占
* 作用:保证资源在使用时的独有性,不会因为并发导致数据错乱,保证系统稳定性
* 案例:
package main
import (
“fmt”
“sync”
“time”
)
var (
num = 0
lock = sync.RWMutex{} // 耗时:100+毫秒
//lock = sync.Mutex{} // 耗时:50+毫秒
)
func main() {
start := time.Now()
go func() {
f