全网有关Go的题太少了,收集了一些来巩固学习,解析是自己写的,有错轻喷!
通过指针变量 p 访问其成员变量 name,下面语法正确的是()
A. p.name
B. (*p).name
C. (&p).name
D. p->name
参考答案:AB
知识点:取地址符&,变量定义后可通过操作符&来取地址操作,指针本质上是内存地址,不能取地址的地址,C错误。<-是通道(channel)发送和接收的符号,D错误。
关于字符串连接,下面语法正确的是()
A. str := ‘abc’ + ‘123’
B. str := "abc" + "123"
C. str := '123' + "abc"
D. fmt.Sprintf("abc%d", 123)
参考答案:BD
知识点:用单引号(')括起来的是字符,AC错误。D:Sprint系列函数会把传入的数据生成并返回一个字符串。%d通用占位符。
关于协程,下面说法正确是()
A. 协程和线程都可以实现程序的并发执行
B. 线程比协程更轻量级
C. 协程不存在死锁问题
D. 通过channel来进行协程间的通信
参考答案:AD
知识点:协程可以认为是轻量级的线程,共享堆但不共享栈。将通道(channel)用于并发编程时,处理不当会发生死锁。
关于init函数,下面说法正确的是()
A. 一个包中,可以包含多个init函数
B. 程序编译时,先执行导入包的init函数,再执行本包内的init函数
C. main包中,不能有init函数
D. init函数可以被其他函数调用
参考答案:AB
知识点:函数init和main在定义时不能有任何的参数和返回值,只能由Go程序自主调用,不能被外部引用。init函数可以在任意包中定义,且可以重复定义多个。
关于循环语句,下面说法正确的有()
A. 循环语句既支持for关键字,也支持while和do-while
B. 关键字for的基本使用方法与C/C++中没有任何差异
C. for循环支持continue和break来控制循环,但是它提供了一个更高级的break,可以选择中断哪一个循环
D. for循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量
参考答案:CD
知识点:在Go语言中只用for来实习次数确定和次数不确定的循环。
6.关于类型转化,下面语法正确的是()
A.
type MyInt int
var i int = 1
var j MyInt = i
B.
type MyInt int
var i int = 1
var j MyInt = (MyInt)i
C.
type MyInt int
var i int = 1
var j MyInt = MyInt(i)
D.
type MyInt int
var i int = 1
var j MyInt = i.(MyInt)
参考答案:C
知识点:类型转换:类型B(类型A的值),在Go语言中支持自定义数据类型:type 新数据类型 基于的数据类型A,是MyInt类型,i是int类型,错误;B,D语法错误.
不是所有类型都可以转换,比如string类型,bool类型不能转为int类型,int(3.14)也不行,数值类型不能通过截取转换为整数类型。
7.关于布尔变量b的赋值,下面错误的用法是()
A. b = true
B. b = 1
C. b = bool(1)
D. b = (1 == 2)
参考答案:BC
知识点:布尔类型无法参与数值运算,也无法与其他类型转换。
8.Golang中的引用类型包括()
A. 数组切片
B. map
C. channel
D. interface
参考答案:ABCD
知识点:引用类型:切片(slice),通道(channel),接口(interface),函数(func),映射(map)
值类型:字符串类型,数值类型,布尔类型,数组类型。