【面试】go

1.go的协程
2.go和C++传map有啥区别
3.你对go语言的的特点

特点
1、go语言是开源的---go语言本身就是go语言编写的
2、静态类型和编译型---go语言书写的程序必须通过编译生成归档文件或可执行文件,而后才能被使用或者执行
3、跨平台---go语言本身支持跨平台开发,不论你是用什么样子的硬件环境还是软件环境基本上都可以进行go语言的开发(这句话有些多余,毕竟现在主流编程语言都支持不同的硬件与软件环境)
4、自动垃圾回收---go语言的垃圾回收是由go语言本身去处理的,不需要人为干预,但是如果你想要对垃圾回收进行机制进行干预这个权限也是对开发者开放的
5、原生支持并发编程---原生支持高并发编程,拥有自己的并发编程机制。
6、完善的构建工具---go程序的获取、编译、测试、安装都可以使用命令行语句完成
7、多编程范式---go语言除了支持函数式编程,也支持面向对象编程,有接口类型和实现类型的概念,但是用嵌入替代了继承
8、代码风格强制统一---这点就不强调了
9、高效的编程和运行---这里面主要是强调编写代码的界面简洁,以及go语言程序能够充分调动计算机的运行资源,提高程序运行效率。
10、丰富的标准库---go语言标准库中有很多好用的API。一定程度上面减少了对于第三方库的依赖,当然如果有好用的第三方库,作为开发者也还是会使用的


Go 协程是什么?
Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是轻量级线程。与线程相比,
创建一个 Go 协程的成本很小。因此在 Go 应用中,常常会看到有数以千计的 Go 协程并发地运行。

Go 协程相比于线程的优势
相比线程而言,Go 协程的成本极低。堆栈大小只有若干 kb,并且可以根据应用的需求进行增减。
而线程必须指定堆栈的大小,其堆栈是固定不变的。
Go 协程会复用(Multiplex)数量更少的 OS 线程。即使程序有数以千计的 Go 协程,也可能只有一个线程。
如果该线程中的某一 Go 协程发生了阻塞(比如说等待用户输入),那么系统会再创建一个 OS 线程,
并把其余 Go 协程都移动到这个新的 OS 线程。所有这一切都在运行时进行,作为程序员,
我们没有直接面临这些复杂的细节,而是有一个简洁的 API 来处理并发。
Go 协程使用信道(Channel)来进行通信。信道用于防止多个协程访问共享内存时发生竞态条件(Race Condition)。
信道可以看作是 Go 协程之间通信的管道。我们会在下一教程详细讨论信道。

如何启动一个 Go 协程?
调用函数或者方法时,在前面加上关键字 go,可以让一个新的 Go 协程并发地运行。

Go map作为函数参数 修改形参会影响到实参,意思go的map默认就是传的引用
C++ map作为函数参数 修改形参不会影响到实参,但是可以传map引用达到修改目的

另外 go的map是无序的,C++的map是有序的

参考资料
https://studygolang.com/articles/12342
https://blog.csdn.net/weixin_39636850/article/details/110590152
https://studygolang.com/subject/7
http://c.biancheng.net/golang/container/

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值