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