题目来源于牛客网
一、选择题
Go语言自带垃圾回收机制。
如果是值传递的话子函数对map修改不会影响父函数中的map,如果是地址传递则会影响。
go语言编译器会自动在以标识符、数字字面量、字母字面量、字符串字面量、特定的关键字(break、continue、fallthrough和return)、增减操作符(++和--)、或者一个右括号、右方括号和右大括号(即)、]、})结束的非空行的末尾自动加上分号。
B选项,6是数字字面量,所以在6的后面会自动加上一个分号,导致编译出错。
D选项,gofmt会自动把6后面的“,”去掉,关掉gofmt后测试,也能通过编译,正常运行。
可以声明一个未指定大小的数组来定义切片,var identifier [ ]type 切片不需要说明长度;
或使用make函数来创建切片 var slice1 []type = make([ ]type ,Len) ;
也可以指定容量 make([ ]T ,length, capacity)。
只要两个接口拥有相同的方法列表(次序不同不要紧),那么它们就是等价的,可以相互赋值。-AB正确。
Go语言接口是否可以赋值,是在编译期就确定的。D错误。
接口的查询是在运行期确定。C正确。
//interface{}本身是type,怎么赋值呢?只可能出现: var v1 interface1 var v2 interface2 v1 = v2
bool类型与int类型无法强制转换。D错误。
<- ch 可以单独调用获取通道的(下一个)值,当前值会被丢弃,但是可以用来验证。
D选项应改为 ch <– value
mock对象的注入:
mock对象的行为都注入到控制器以后,我们接着要将mock对象注入给interface,使得mock对象在测试中生效。
在使用GoStub框架之前,很多人都使用土方法,比如Set。这种方法有一个缺陷:当测试用例执行完成后,并没有回滚interface到真实对象,有可能会影响其它测试用例的执行。所以,笔者强烈建议大家使用GoStub框架完成mock对象的注入。
- 全局变量可通过GoStub框架打桩
- 过程可通过GoStub框架打桩
- 函数可通过GoStub框架打桩
- interface可通过GoMock框架打桩
二、参考资料
三、总结
本次主要针对map,异常处理,切片,接口,布尔变量的赋值、channel的语法进行了练习,并了解了GoMock框架。