1. 【初级】下面属于关键字的是() A. func B. def C. struct D. class
参考答案:AC
2. 【初级】定义一个包内全局字符串变量,下面语法正确的是() A. var str string B. str := "" C. str = "" D. var str = ""
参考答案:AD
3. 【初级】通过指针变量 p 访问其成员变量 name,下面语法正确的是() A. p.name B. (*p).name C. (&p).name D. p->name
参考答案:AB
4. 【初级】关于接口和类的说法,下面说法正确的是() A. 一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口 B. 实现类的时候,只需要关心自己应该提供哪些方法,不用再纠结接口需要拆得多细才合理 C. 类实现接口时,需要导入接口所在的包 D. 接口由使用方按自身需求来定义,使用方无需关心是否有其他模块定义过类似的接口
参考答案:ABD
5. 【初级】关于字符串连接,下面语法正确的是() A. str := ‘abc’ + ‘123’ B. str := "abc" + "123" C. str := '123' + "abc" D. fmt.Sprintf("abc%d", 123)
参考答案:BD
6. 【初级】关于协程,下面说法正确是() A. 协程和线程都可以实现程序的并发执行 B. 线程比协程更轻量级 C. 协程不存在死锁问题 D. 通过channel来进行协程间的通信
参考答案:AD
7. 【中级】关于init函数,下面说法正确的是() A. 一个包中,可以包含多个init函数 B. 程序编译时,先执行导入包的init函数,再执行本包内的init函数 C. main包中,不能有init函数 D. init函数可以被其他函数调用
参考答案:AB
8. 【初级】关于循环语句,下面说法正确的有() A. 循环语句既支持for关键字,也支持while和do-while B. 关键字for的基本使用方法与C/C++中没有任何差异 C. for循环支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环 D. for循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量 参考答案:CD
9. 【中级】对于函数定义:
func add(args ...int) int {
sum :=0
for _,arg := range args {
sum += arg
}
returnsum
}
下面对add函数调用正确的是() A. add(1, 2) B. add(1, 3, 7) C. add([]int{1, 2}) D. add([]int{1, 3, 7}...)
参考答案:ABD
【初级】关于类型转化,下面语法正确的是() A.
type MyInt int
var i int = 1
var jMyInt = i
B.
type MyIntint
var i int= 1
var jMyInt = (MyInt)i
C.
type MyIntint
var i int= 1
var jMyInt = MyInt(i)
D.
type MyIntint
var i int= 1
var jMyInt = i.(MyInt)
参考答案:C
参考答案:ABC
【初级】关于const常量定义,下面正确的使用方式是() A.
const Pi float64 = 3.14159265358979323846
const zero= 0.0
B.
const (
size int64= 1024
eof = -1
)
C.
const (
ERR_ELEM_EXISTerror = errors.New("element already exists")
ERR_ELEM_NT_EXISTerror = errors.New("element not exists")
)
D.
const u, vfloat32 = 0, 3
const a,b, c = 3, 4, "foo"
参考答案:ABD
参考答案:BC
【中级】下面的程序的运行结果是()
func main() {
if (true) {
defer fmt.Printf("1")
} else {
defer fmt.Printf("2")
}
fmt.Printf("3")
}
A. 321 B. 32 C. 31 D. 13
参考答案:C
参考答案:BD
参考答案:ACD
参考答案:ABCD
参考答案:BC
参考答案:ABCD
参考答案:BD
参考答案:BCD
【中级】从切片中删除一个元素,下面的算法实现正确的是() A.
func (s *Slice)Remove(value interface{})error {
for i, v := range *s {
if isEqual(value, v) {
if i== len(*s) - 1 {
*s = (*s)[:i]
}else {
*s = append((*s)[:i],(*s)[i + 2:]...)
}
return nil
}
}
return ERR_ELEM_NT_EXIST
}
B.
func (s*Slice)Remove(value interface{}) error {
for i, v:= range *s {
if isEqual(value, v) {
*s =append((*s)[:i],(*s)[i + 1:])
return nil
}
}
returnERR_ELEM_NT_EXIST
}
C.
func (s*Slice)Remove(value interface{}) error {
for i, v:= range *s {
if isEqual(value, v) {
delete(*s, v)
return nil
}
}
returnERR_ELEM_NT_EXIST
}
D.
func (s*Slice)Remove(value interface{}) error {
for i, v:= range *s {
if isEqual(value, v) {
*s =append((*s)[:i],(*s)[i + 1:]...)
return nil
}
}
returnERR_ELEM_NT_EXIST
}
参考答案:D
【初级】对于局部变量整型切片x的赋值,下面定义正确的是() A.
x := []int{
1, 2, 3,
4, 5, 6,
}
B.
x :=[]int{
1, 2, 3,
4, 5, 6
}
C.
x :=[]int{
1, 2, 3,
4, 5, 6}
D.
x :=[]int{1, 2, 3, 4, 5, 6,}
参考答案:ACD
【初级】关于变量的自增和自减操作,下面语句正确的是() A.
i := 1
i++
B.
i := 1
j = i++
C.
i := 1
++i
D.
i := 1
i--
参考答案:AD
参考答案:C
【中级】如果Add函数的调用代码为:
func main() {
var a Integer = 1
var b Integer = 2
var i interface{} = &a
sum := i.(*Integer).Add(b)
fmt.Println(sum)
}
则Add函数定义正确的是() A.
typeInteger int
func (aInteger) Add(b Integer) Integer {
return a + b
}
B.
typeInteger int
func (aInteger) Add(b *Integer) Integer {
return a + *b
}
C.
typeInteger int
func (a*Integer) Add(b Integer) Integer {
return *a + b
}
D.
typeInteger int
func (a*Integer) Add(b *Integer) Integer {
return *a + *b
}
参考答案:AC
【中级】如果Add函数的调用代码为:
func main() {
var a Integer = 1
var b Integer = 2
var i interface{} = a
sum := i.(Integer).Add(b)
fmt.Println(sum)
}
则Add函数定义正确的是() A.
typeInteger int
func (a Integer)Add(b Integer) Integer {
return a + b
}
B.
typeInteger int
func (aInteger) Add(b *Integer) Integer {
return a + *b
}
C.
typeInteger int
func (a*Integer) Add(b Integer) Integer {
return *a + b
}
D.
typeInteger int
func (a*Integer) Add(b *Integer) Integer {
return *a + *b
}
参考答案:A
【中级】关于GetPodAction定义,下面赋值正确的是()
type Fragment interface {
Exec(transInfo *TransInfo) error
}
type GetPodAction struct {
}
func (g GetPodAction) Exec(transInfo*TransInfo) error {
...
return nil
}
A. var fragment Fragment =new(GetPodAction) B. var fragment Fragment = GetPodAction C. var fragment Fragment = &GetPodAction{} D. var fragment Fragment = GetPodAction{}
参考答案:ACD
参考答案:AD
参考答案:ABC
参考答案:ABC
参考答案:ABC
参考答案:BCD
参考答案:ABD
参考答案:BD
参考答案:AC
参考答案:ABCD
参考答案:ABD
【中级】关于slice或map操作,下面正确的是() A.
var s []int
s =append(s,1)
B.
var mmap[string]int
m["one"]= 1
C.
var s[]int
s =make([]int, 0)
s =append(s,1)
D.
var mmap[string]int
m =make(map[string]int)
m["one"]= 1
参考答案:ACD
参考答案:ABCD
参考答案:D
参考答案:ABCD
参考答案:ABD
参考答案:ABC
参考答案:ABC
参考答案:ACD
100. 【中级】关于map,下面说法正确的是() A. map反序列化时json.unmarshal的入参必须为map的地址 B. 在函数调用中传递map,则子函数中对map元素的增加不会导致父函数中map的修改 C. 在函数调用中传递map,则子函数中对map元素的修改不会导致父函数中map的修改 D. 不能使用内置函数delete删除map的元素
参考答案:A
101. 【中级】关于GoStub,下面说法正确的是() A. GoStub可以对全局变量打桩 B. GoStub可以对函数打桩 C. GoStub可以对类的成员方法打桩 D. GoStub可以打动态桩,比如对一个函数打桩后,多次调用该函数会有不同的行为
参考答案:ABD
102. 【初级】关于select机制,下面说法正确的是() A. select机制用来处理异步IO问题 B. select机制最大的一条限制就是每个case语句里必须是一个IO操作 C. golang在语言级别支持select关键字 D. select关键字的用法与switch语句非常类似,后面要带判断条件
参考答案:ABC
103. 【初级】关于内存泄露,下面说法正确的是() A. golang有自动垃圾回收,不存在内存泄露 B. golang中检测内存泄露主要依靠的是pprof包 C. 内存泄露可以在编译阶段发现 D. 应定期使用浏览器来查看系统的实时内存信息,及时发现内存泄露问题
参考答案:BD
———————————————— 原文链接:https://blog.csdn.net/itcastcpp/article/details/80462619 ————————————————
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。