1.与其他语言相比,使用Go有什么好处?
- 与其他作为学术实验开始的语言不同,Go 代码的设计是务实的。 每个功能和语法决策都旨在让程序员的生活更轻松 。
- Golang 针对并发进行了优化,并且在规模上 运行良好 。
- 由于单一的标准代码格式,Golang 通常被认为比其他语言 更具可读性 。
- 自动垃圾收集明显比 Java 或 Python 更有效 ,因为它 与程序同时执行 。
2.Golang 使用什么数据类型?
Golang 使用以下类型:
- Method、Boolean、Numeric
- String、Array、Slice
- Struct、Pointer、Function
- Interface、Map、Channel
3.Golang 程序中的包是什么?
包(pkg)是 Go 工作区中包含 Go 源文件或其他包的 目录 。源文件中的每个函数、变量和类型都 存储在链接包中 。
每个 Go 源文件都 属于一个包 ,该包在文件顶部使用以下命令声明:
package <packagename>
您可以使用以下方法导入和导出包 以重用 导出的函数或类型:
import <packagename>
Golang 的标准包是 fmt ,其中包含格式化和打印功能,如 Println()
4.Golang 支持什么形式的类型转换?将整数转换为浮点数
Go 支持显式类型转换以满足其严格的类型要求。
i := 55 // int
j := 67.5 // float646
sum := i + int(j) // j is converted to int
5.什么是 Goroutine?你如何停止它
一个 Goroutine 是一个函数或方法执行,同时旁边其他任何线程采用了特殊的 Goroutine 线程。
Goroutine 线程比标准线程更轻量级 ,大多数 Golang 程序同时使用数千个 g、Goroutine。
要创建 Goroutine,请在函数声明之前添加关键字 go :
go f(x, y, z)
您可以通过向 Goroutine 发送一个信号通道来停止它 。Goroutine 只能在被告知检查时响应信号,因此您需要在逻辑位置(例如 for 循环顶部)包含检查。
package main
func main() {
quit := make(chan bool)
go func() {
for {
select {
case <-quit:
return
default:
// ...
}
}
} ()
// ...
quit <- true
}
6.如何在运行时检查变量类型?
类型检查 是在运行时检查变量类型的最佳方式。类型检查 按类型而不是值 来评估变量。
每个 switch 至少包含 一个 case,用作条件语句,和一个 default case ,如果没有一个 case 为真,则执行。
7.Go 两个接口之间可以存在什么关系?
如果两个接口有 相同的方法列表 ,那么他们就是 等价 的,可以相互赋值。
如果接口 A 的方法列表是接口 B 的方法列表的 子集 ,那么接口 B 可以赋值给接口 A。
接口查询是否成功,是 在运行时 才能够确定。
8.Go 当中同步锁有什么特点?作用是什么?
当一个 Goroutine (协程)获得了 Mutex 后,其他 Goroutine (协程)就只能乖乖的 等待 ,除非该 goroutine 释放 了该 Mutex。
RWMutext在 读锁占用 的情况下, 会阻止写,但不阻止读 。RWMutex在 写锁占用 情况下, 会阻止任何其他 goroutine(无论读和写)进来,整个锁相当于由该 goroutine 独占 。
同步锁的作用是保证资源在使用时的独有性 ,不会因为并发而导致数据错乱,保证系统的稳定性。
9.Go 语言当中 channel(通道)有什么特点,需要注意什么?
如果给一个 nil 的 channel 发送数据,会造成 永久阻塞 。如果从一个 nil 的 channel 中接收数据,也会造成永久阻塞。
给一个 已经关闭 的 channel 发送 数据,会引起 panic 。
从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值 。
10.Go语言当中 channel 缓冲有什么特点?
无缓冲 的 channel 是 同步的 ,而 有缓冲 的 channel 是 非同步的 。
本文摘自网络,如有侵权,请联系删除