100道GO笔试_答案&解析&扩展_选择题11-20

100道GO笔试_答案&解析&扩展_选择题11-20,第1张

概述说明:注释:本文中出现的所有题目均来自于网络本人只是对其进行解答和注释所有题目均为个人解答方案,如有纰漏或更好的解答欢迎指正如果有需要更详细解答的题目也可以留言关于局部变量的初始化,下面正确的使用方式是:A.variint=10B.vari=10C.i:=10D.i=10[答 说明:

注释:
本文中出现的所有题目均来自于网络
本人只是对其进行解答和注释
所有题目均为个人解答方案,如有纰漏或更好的解答欢迎指正
如果有需要更详细解答的题目也可以留言

关于局部变量的初始化,下面正确的使用方式是:
A. var i int = 10
B. var i = 10
C. i := 10
D. i = 10

[答案]:ABC
[解析&扩展]:
这题类似于第一题,于全局变量不同的是,局部变量可以使用:=自动推导的方式,而全局变量不可以,必须使用var关键字。因此ABC均正确。D既没有使用:=自动推导类型,也没有使用var关键字声明。

关于 const 常量定义,下面正确的使用方式是:
A.
const Pi float64 = 3.14159265358979323846const zero= 0.0

B.

const (size int64= 1024eof = -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, 3const a,b, c = 3, 4, "foo"

[答案]:ABD
[解析&扩展]:
A: 正常的常量申明,正确--const在声明并初始化的时候可以不需要指定数据类型,因此正确。
B: var和const都可以使用小括号来声明多个变量/常量,这样可以免去在每一个变量前面都需要使用关键字声明。因此B正确。
C:无法把一个错误信息转化为const,因此C错误。
D:const于var都可以使用平行赋值的方式初始化,因此D正确。

关于布尔变量 b 的赋值,下面错误的用法是:
A. b = true
B. b = 1
C. b = bool(1)
D. b = (1 == 2)

[答案]:BC
[解析&扩展]:
A,D是对布尔变量的赋值,因此正确。(判断两个数是否相等会产生一个布尔值)
B是无法将int转化为bool--golang不支持隐式转化。
C则是使用了go中不存在的语法,因此错误。

下面的程序可能的运行结果是:
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
[解析&扩展]:
defer的执行机制是先进后出--即在代码中优先到达的defer语句,反而会后被执行。但是defer是在整个函数调用结束,之后才执行(但是会在return之前)所以:
main函数优先被执行完成,所以会输出3,由于if语句的判断条件恒为true,所以只有第一个defer语句会被执行,第二个并不会,所以会输出1,并且在main函数的输出语句之后,因此,会输出31。
PS: 这一类问题可以在编译器中加断点然后单步执行,查看程序执行顺序。

关于 switch 语句,下面说法正确的有:
A. 条件表达式必须为常量或者整数
B. 单个 case 中,可以出现多个结果选项
C. 需要用 break 来明确退出一个 case
D. 只有在 case 中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个 case

[答案]:BD
[解析&扩展]:
A: 最简单的反驳,字符也是可以的,因此A错误。
B: 一个case可以有多个触发条件,避免了代码的冗余,因此B正确。
C: GO中每一个case执行完成之后会默认结束此case,并不用break,因此错误。
D: 每一个case执行结束后都会默认结束switch语句,除非有fallthrough关键字,才会接着执行后面的case,因此D正确。

golang 中没有隐藏的 this 指针,这句话的含义是:
A. 方法施加的对象显式传递,没有被隐藏起来
B. golang 沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和构造函数
C. golang 的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
D. 方法施加的对象不需要非得是指针,也不用非得叫 this

[答案]:ACD
[解析&扩展]:
A:如java,C++会在类的内部实现中使用this关键字表示调用该方法的对象,但是在golang中方法有明确的接收者(写在func关键字和函数名之间),因此并不需要使用this关键字。所以A正确。
B: golang并没有提供继承,只是通过结构体嵌套变相的实现了继承,至于虚函数那是C++中的概念,golang中并未提及,因此B错误。
C:虽然golang是面向接口(interface)编程,但是也可以实现面向对象,因为结构体在golang中的灵活,所以也变得更加直观,因此C正确。
D: 非指针结构体也可以调用其方法,所以D正确。

golang 中的引用类型包括:
A. 数组切片
B. map
C. channel
D. interface

[答案]:ABCD
[解析&扩展]:
就和人类包括日本人一样,没有理由,因为golagn在设计最初就是把他们设计成引用类型的。

golang 中的指针运算包括:
A. 可以对指针进行自增或自减运算
B. 可以通过 & 取指针的地址
C. 可以通过 * 取指针指向的数据
D. 可以对指针进行下标运算

[答案]:BC
[解析&扩展]:
B,C是指针的两个 *** 作方式,即取地址和解引用,因此正确。
A,D都是对指针的非法 *** 作--可能导致内存泄漏。因此错误。

关于 main 函数(可执行程序的执行起点),下面说法正确的是:
A. main 函数不能带参数
B. main 函数不能定义返回值
C. main 函数所在的包必须为 main 包
D. main 函数中可以使用 flag 包来获取和解析命令行参数

[答案]:ABCD
[解析&扩展]:
同17,因为就是这样设计的,想要知道为什么,只有问golang最初的设计者。

下面赋值正确的是:
A. var x = nil
B. var x interface{} = nil
C. var x string = nil
D. var x error = nil

[答案]:BD
[解析&扩展]:
A: nil不能直接付给一个未初始化的变量,因此错误。
B:空接口可以接受任何参数,包括nil,因此正确。
C:同A。
D:error类型可以为nil--最常见的如各种函数的返回值中,第二个返回值往往就是bool或者error,在调用完之后需要判断error是否为nil。因此D正确。

总结

以上是内存溢出为你收集整理的100道GO笔试_答案&解析&扩展_选择题11-20全部内容,希望文章能够帮你解决100道GO笔试_答案&解析&扩展_选择题11-20所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1238623.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存