一、选择题
1、下面属于关键字的是:(A、C)
A、func
B、def
C、struct
D、class
2、定义一个包内全局字符串变量,下面语法正确的是:(A、B)
A、var str string
B、str := “”
C、str = “”
D、var str = “”
3、通过指针变量 p 访问其成员变量 name,下面语法正确的是:(A、B)
A、p.name
B、(*p).name
C、(&p).name
D、p->name
4、关于接口和类的说法,下面说法正确的是:(A、C)
A、一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口
B、实现类的时候,只需要关心自己应该提供哪些方法,不用再纠结接口需要拆得多细才合理
C、类实现接口时,需要导入接口所在的包
D、接口由使用方按自身需求来定义,使用方无需关心是否有其他模块定义过类似的接口
5、关于字符串连接,下面语法正确的是:(B、C)
A、str := ‘abc’ + ‘123’
B、str := “abc” + “123”
C、str := ‘123’ + “abc”
D、fmt.Sprintf(“abc%d”, 123)
6、关于协程,下面说法正确是:(A、D)
A、协程和线程都可以实现程序的并发执行
B、线程比协程更轻量级
C、协程不存在死锁问题
D、通过 channel 来进行协程间的通信
7、关于 init 函数,下面说法正确的是:(A、B)
A、一个包中,可以包含多个 init 函数
B、程序编译时,先执行导入包的 init 函数,再执行本包内的 init 函数
C、main 包中,不能有 init 函数
D、init 函数可以被其他函数调用
8、关于循环语句,下面说法正确的有:(C、D)
A、循环语句既支持 for 关键字,也支持 while 和 do-while
B、关键字 for 的基本使用方法与 C/C++ 中没有任何差异
C、for 循环支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break,可以选择中断哪一个循环
D、for 循环不支持以逗号为间隔的多个赋值语句,必须使用平行赋值的方式来初始化多个变量
9、对于函数定义:
func add(args ...int) int {
sum := 0
for _, arg := range args {
sum += arg
}
return sum
}
下面对 add 函数调用正确的是:(A、B、D)
A、add(1, 2)
B、add(1, 3, 7)
C、add([]int{1, 2})
D、add([]int{1, 3, 7}…)
10、关于类型转化,下面语法正确的是:(C)
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)
11、关于局部变量的初始化,下面正确的使用方式是:(A、B、C)
A、var i int = 10
B、var i = 10
C、i := 10
D、i = 10
12、关于 const 常量定义,下面正确的使用方式是:(A、B、D)
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"
13、关于布尔变量 b 的赋值,下面错误的用法是:(A、D)
A、b = true
B、b = 1
C、b = bool(1)
D、b = (1 == 2)
14、下面的程序可能的运行结果是:(A)
func main() {
if true {
defer fmt.Printf("1")
} else {
defer fmt.Printf("2")
}
fmt.Printf("3")
}
A、321
B、32
C、31
D、13
15、关于 switch 语句,下面说法正确的有:(B、D)
A、条件表达式必须为常量或者整数
B、单个 case 中,可以出现多个结果选项
C、需要用 break 来明确退出一个 case
D、只有在 case 中明确添加 fallthrough 关键字,才会继续执行紧跟的下一个 case
16、golang 中没有隐藏的 this 指针,这句话的含义是:(A)
A、方法施加的对象显式传递,没有被隐藏起来
B、golang 沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和构造函数
C、golang 的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达
D、方法施加的对象不需要非得是指针,也不用非得叫 this
17、golang 中的引用类型包括:(A、B、C、D)
A、数组切片
B、map
C、channel
D、interface
18、golang 中的指针运算包括:(B、C)
A、可以对指针进行自增或自减运算
B、可以通过 & 取指针的地址
C、可以通过 * 取指针指向的数据
D、可以对指针进行下标运算
19、关于 main 函数(可执行程序的执行起点),下面说法正确的是:(A、B、C、D)
A、main 函数不能带参数
B、main 函数不能定义返回值
C、main 函数所在的包必须为 main 包
D、main 函数中可以使用 flag 包来获取和解析命令行参数
20、下面赋值正确的是:(B、D)
A、var x = nil
B、var x interface{} = nil
C、var x string = nil
D、var x error = nil
21、关于整型切片的初始化,下面正确的是:(B、C、D)
A、s := make([]int)
B、s := make([]int, 0)
C、s := make([]int, 5, 10)
D、s := []int{1, 2, 3, 4, 5}
22、从切片中删除一个元素,下面的算法实现正确的是:(D)
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
}
}
return ERR_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
}
}
return ERR_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
}
}
return ERR_ELEM_NT_EXIST
}
23、对于局部变量整型切片 x 的赋值,下面定义正确的是:(A、C)
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,}
24、关于变量的自增和自减操作,下面语句正确的是:(A、D)
A、
i := 1
i++
B、
i := 1
j = i++
C、
i := 1
++i
D、
i := 1
i--
25、关于函数声明,下面语法错误的是:(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, b int) (value int, error)
D、func f(a int, b int) (int, int, error)
26、如果 Add 函数的调用代码为:
func main() {
var a Integer = 1
var b Integer = 2
var i interface{
} = &a
sum := i.(*Integer).Add(b)
fmt.Println(sum)
}
则 Add 函数定义正确的是:(C)
A、
type Integer int
func (a Integer) Add(b Integer) Integer {
return a + b
}
B、
type Integer int
func (a Integer) Add(b *Integer) Integer {
return a + *b
}
C、
type Integer int
func (a *Integer) Add(b Integer) Integer {
return *a + b
}
D、
type Integer int
func (a *Integer) Add

最低0.47元/天 解锁文章
2835





