单选题
-
匿名函数可以直接赋值给一个变量或者直接执行,这一说法是否正确( A )
A. true
B. false -
结构体在序列化时非导出变量(以小写字母开头的变量名)不会被encode,因为在encode时这些非导出变量的值为其类型的零值,这一说法是否正确( B )
A. true
B. false -
下面反引号中的代码,比如json:“x”,作用是X字段在从结构体实例编码到json数据格式的时候,使用x作为名字,这可以看做是一种重命名的方式(A)
A. 正确
B. 错误
type Position struct{
X int `json:"x"`
Y int `json:"y"`
Z int `json:"Z"`
}
-
使用for range迭代map时每次迭代的顺序可能不一样,因为map的迭代是随机的,这一说法是否正确(A)
A. true
B. false -
可以给任意类型添加相应的方法,这一说法是否正确(B)
A. true
B. false -
如果调用方调用了一个具有多返回值的方法,但是却不想关心其中的某个返回值,可以简单地用一个下划线“_”来跳过这个返回值,该下划线对应的变量叫匿名变量,这一说法是否正确(A)
A. true
B. false -
golang支持goto语句,这一说法是否正确(A)
A.true
B.false -
关于无缓冲和有缓冲的channel,下面说法正确的是(D)
A. 无缓冲的channel是默认的缓冲为1的channel
B. 无缓冲的channel和有缓冲的channel都是同步的
C. 无缓冲的channel和有缓冲的channel都是非同步的
D. 无缓冲的channel是同步的,而有缓冲的channel是非同步的 -
关于函数声明,下面语法错误的是(C)
A.
func f(a,b int)(value int,err error)
B.
func f(a int, b int)(value int,err error)
C.
func f(a int,b int)(value int,error)
D.
func f(a,b int)(int,int,error)
- 下面的程序的运行结果是(C)
A. 321
B. 32
C. 31
D. 13
func main() {
if (true) {
defer fmt.Printf("1")
}else {
defer fmt.Printf("2")
}
fmt.Printf("3")
}
多选题
-
对于异常的触发,下面说法正确的是( ABCD )
A. 空指针解析
B. 下标越界
C. 除数为0
D. 调用panic异常 -
对于变量的自增和自减操作,下面语句正确的是( AD )
A.
{
i:=1
i++
}
B.
{
i:=1
j:=i++
}
C.
{
i:=1
++i
}
D.
{
i:=1
i--
}
-
关于函数返回值的错误设计,下面说法正确的是(ABCD )
A. 如果失败原因只有一个,则返回bool
B. 如果失败原因超过一个,则返回error
C. 如果没有失败原因,则不返回bool或者error
D. 如果重试几次可以避免失败,则不要立即返回bool或者error -
下面属于关键字的是(AC)
A. func
B. def
C. struct
D. class
-
golang中的指针运算包括(BC)
A. 可以对指针进行自增或自减运算
B. 可以通过"&“取指针的地址
C. 可以通过”*"取指针指向的数据
D. 可以对指针进行下标运算 -
关于main函数(可执行程序的执行起点),下面说法正确的是(ABCD)
A. main函数不能带参数
B. main函数不能定义返回值
C. main函数所在的包必须为main包
D. main函数中可以使用flag包来获取和解析命令行参数 -
关于内存泄漏,下面说法正确的是( BD)
A. golang有自动垃圾回收,不存在内存泄漏
B. golang中检测内存泄漏,主要依靠的是pprof包
C. 内存泄漏可以在编译阶段实现
D. 应定期是用来浏览器来查看系统的实时内存信息,及时发现内存泄漏问题 -
关于init函数,下面说法正确的是(AB)
A. 一个包中可以包含多个init函数
B. 程序编译时,先执行导入包的init函数,再执行本包内的init函数
C. main包中不能有init函数
D. init函数可以被其他函数调用 -
关于switch语句,下面说法正确的有(BD)
A. 条件表达式必须为常量或整数
B. 单个case中,可以出现多个结果选项
C. 需要用break来明确退出一个case
D. 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case -
关于接口,下面说法正确的是(ABC)
A. 只要两个接口拥有相同的方法列表(次序不同不要紧),那么他们就是等价的,可以互相赋值
B. 如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A
C. 接口查询是否成功,要在运行期才能够确定
D.接口赋值是否可行,要在运行期才能够确定 -
通过指针变量 p 访问其成员变量 name,下面语法正确的是(AB)
A. p.name
B. (*p).name
C. (&p).name
D. p -> name -
关于beego框架,下面说法正确的是(ABC)
A. beego是一个golang实现的轻量级HTTP框架
B. beego可以通过注释(注解)路由、正则路由等多种方式完成URL路由注入
C. 可以使用 bee new 工具生成空工程,然后bee run 命令自动热编译
D. beego框架只提供了对url路由的处理,而对于MVC架构中的数据库部分未提供框架支持 -
golang中的引用类型包括(ABCD)
A. 数组切片
B. map
C. channel
D. interface -
关于接口和类的说法,下面说法正确的是(ABD)
A. 一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口
B. 实现类的时候,只需要关心自己应该提供哪些方法,不用再纠结接口拆的多细才合理
C. 类实现接口时,需要导入接口所在的包
D. 接口由使用方按自身需求来定义 -
关于局部变量的初始化,下面正确的使用方式是(ABC)
A. var i int = 10
B. var i = 10
C. i := 10
D. i = 10
- 对于局部变量整型切片x的赋值,下面定义正确的是(ACD)
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,}
- golang中没有隐藏的this指针,这句话的含义是(ACD)
A. 方法施加的对象显示传递,没有被隐藏起来
B. golang沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和 构造函数
C. golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
D. 方法施加的对象不需要非得是指针,也不用非得叫this