go面试题-基础类

这篇博客探讨了Go语言的基础知识,包括go的优势、数据类型、包、类型转换和goroutine。深入讨论了goroutine的停止、类型检查、接口关系、同步锁和读写锁的使用。此外,还涵盖了channel的特性和使用,如缓冲、容量、并发安全问题。同时,讲解了new和make的区别、数组与切片的差异以及值传递和地址传递的概念。最后,涉及到了map的底层实现和扩容机制。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值