1、golang中没有隐藏的this指针,这句话的含义是()
A. 方法施加的对象显式传递,没有被隐藏起来
B. golang沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和构造函数
C. golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
D. 方法施加的对象不需要非得是指针,也不用非得叫this
参考答案:ACD
2、关于GoMock,下面说法正确的是()
A. GoMock可以对interface打桩
B. GoMock可以对类的成员函数打桩
C. GoMock可以对函数打桩
D. GoMock打桩后的依赖注入可以通过GoStub完成
参考答案:AD
3、关于接口,下面说法正确的是()
A. 只要两个接口拥有相同的方法列表(次序不同不要紧),那么它们就是等价的,可以相互赋值
B. 如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A
C. 接口查询是否成功,要在运行期才能够确定
D. 接口赋值是否可行,要在运行期才能够确定
参考答案:ABC
4、golang中大多数数据类型都可以转化为有效的JSON文本,下面几种类型除外()
A. 指针
B. channel
C. complex
D. 函数
参考答案:BCD
5、关于go vendor,下面说法正确的是()
A. 基本思路是将引用的外部包的源代码放在当前工程的vendor目录下面
B. 编译go代码会优先从vendor目录先寻找依赖包
C. 可以指定引用某个特定版本的外部包
D. 有了vendor目录后,打包当前的工程代码到其他机器的$GOPATH/src下都可以通过编译
参考答案:ABD
6、关于函数返回值的错误设计,下面说法正确的是()
A. 如果失败原因只有一个,则返回bool
B. 如果失败原因超过一个,则返回error
C. 如果没有失败原因,则不返回bool或error
D. 如果重试几次可以避免失败,则不要立即返回bool或error
参考答案:ABCD
7、关于异常设计,下面说法正确的是()
A. 在程序开发阶段,坚持速错,让程序异常崩溃
B. 在程序部署后,应恢复异常避免程序终止
C. 一切皆错误,不用进行异常设计
D. 对于不应该出现的分支,使用异常处理
参考答案:ABD
8、关于slice或map操作,下面正确的是()
A.
var s []int
s = append(s,1)
B.
var m map[string]int
m["one"] = 1
C.
var s []int
s = make([]int, 0)
s = append(s,1)
D.
var m map[string]int
m = make(map[string]int)
m["one"] = 1
参考答案:ACD
package main
import "fmt"
func main() {
//var s []int
//fmt.Printf("1 s = %+v
", s) //1 s = []
//s = append(s, 1)
//fmt.Printf("2 s = %+v
", s) //2 s = [1]
//var m map[string]int
//fmt.Printf("m = %+v
", m) //m = map[]
//m["one"] = 1
//fmt.Printf("m["one"] = %+v
", m["one"]) // 报错panic: assignment to entry in nil map
//var s []int
//fmt.Printf("1 s = %+v
", s) //1 s = []
//s = make([]int, 0)
//fmt.Printf("2 s = %+v
", s) //2 s = []
//s = append(s, 1)
//fmt.Printf("3 s = %+v
", s) //3 s = [1]
var m map[string]int
fmt.Printf("m = %+v
", m) //m = map[]
// Map: 根据 size 大小来初始化分配内存,不过分配后的 map 长度为 0,如果 size 被忽略了,那么会在初始化分配内存时分配一个小尺寸的内存
m = make(map[string]int)
fmt.Printf("m = %+v
", m) //m = map[]
m["one"] = 1
fmt.Printf("m["one"] = %+v
", m["one"]) //m["one"] = 1
}
9、关于goconvey,下面说法正确的是()
A. goconvey是一个支持golang的单元测试框架
B. goconvey能够自动监控文件修改并启动测试,并可以将测试结果实时输出到web界面
C. goconvey提供了丰富的断言简化测试用例的编写
D. goconvey无法与go test集成
参考答案:ABC
10、关于GoStub,下面说法正确的是()
A. GoStub可以对全局变量打桩
B. GoStub可以对函数打桩
C. GoStub可以对类的成员方法打桩
D. GoStub可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为
参考答案:ABD