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