Golang基础语法考察
Golang语法相关
1.结构体序列化
1.(单选)以下代码,会发生什么
|
|
A. 发生错误,输出 err occurred
B. 没有发生错误,输出 everything is ok
C. 发生 panic
在对结构体序列化为 JSON 时,需要注意几点问题:
-
字段能否导出,如果字段首字母是大写的,就可以导出,否则就是不可导出的;
-
不支持序列化的类型:通道(Channel)和函数(Func)类型是不能序列化,如果我们尝试对这些类型进行序列化,会直接报错。
但在本题中,尽管标准库在遇到管道/函数等无法被序列化的内容时会发生错误,但因为本题中 d 和 e 均为小写未导出变量,因此不会发生序列化错误。
所以本题选择 B。
2.自增操作
2.(多选)关于变量的自增和自减操作,下面语句正确的是
A.
|
|
B.
|
|
C.
|
|
D.
|
|
在 Go 语言中,不支持前置自增的操作,所以 C 选项是错误的;
在 Go 语言中,++、– 操作符都是后置操作符,必须跟在操作数后面(不支持前置自增的操作),并且它们没有返回值,所以它们不能用于表达式。
所以 B、C 选项是错误的;选择 AD。
3.slice和map初始化
3.关于slice或map操作,下面正确的是
A.
|
|
B.
|
|
C.
|
|
D.
|
|
在 Go 语言中,如果你声明了一个切片(slice)但没有为其分配任何内存(即没有初始化它),然后尝试使用append
函数向其中添加元素,Go 会为你自动处理底层的数组分配和扩容。所以 A 选项正确。
如果声明了一个map
但没有为其分配内存(即没有初始化它),然后尝试向其中添加元素,会得到一个运行时错误(panic)。这是因为Go中的map
是一个引用类型,它需要一个底层的哈希表来存储键值对。当声明一个map
但没有初始化它时,它实际上是一个nil
的引用,没有指向任何有效的内存区域。
为了避免这个错误,需要在向
map
添加元素之前,使用make
函数来初始化它。make
函数会为map
分配底层的哈希表,并返回一个指向该哈希表的引用。
所以 B 选择不正确。
C 选项先声明了切片 s,然后使用 make 对其初始化(分配内存),最后使用append 向 s 中添加元素,正确。
D 选项和 C 选项一样,也是正确的。