您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页原创Go语言题目(基础)

原创Go语言题目(基础)

来源:叨叨游戏网
原创Go语⾔题⽬(基础)

题⽬内容来源于Go语⾔的经典书籍《GO编程语⾔》

题⽬

选择题

1. 下列说法错误的是:

A. main包定义了⼀个独⽴可执⾏的⼆进制程序,以main函数作为程序执⾏的⼊⼝。B. 没有导⼊需要的包或者导⼊了不需要的包都会导致编译失败。

C. 不可以在语句或者声明的末尾添加分号,因为编译器会主动将⼀些换⾏符转换为分号。D. 左⼤括号必须在上⼀条语句的⾏末,不可以另起⼀⾏。

2. 下列说法错误的是:

A. Go语⾔可以有多返回值的函数,在获取返回值的时候要全部取得。

B. Go语⾔不能有未使⽤的局部变量和全局变量,这将导致编译错误,但是可以⽤空标识符获得不需要的值从⽽丢弃。C. 函数的形参和有名的返回值都是函数最外层的局部变量。D. 函数内对引⽤类型的形参进⾏修改会影响到实参

3. 下列关于map说法错误的是:

A. map是键值对的集合,可以提供常数时间的存取操作 B. 键可以是任意类型 C. 值可以是任意类型

D. 如果map中没有⼀个键k1,那么取k1对应的值,其值为对应类型的零值4. 下列关于switch控制流错误的是:A. switch不可以紧跟语句或者函数调⽤

B. 不需要在每⼀个case后写break,默认执⾏完case后的语句会⾃动退出。C. switch可以不带操作对象,即不使⽤⽐较的表达式

D. 可以使⽤fallthrough在执⾏完case后的逻辑语句后继续后⾯的case5. 下列关于变量和指针错误的是:

A. ⼀个变量对应⼀个对应类型值的内存空间。B. ⼀个指针的值是另⼀个变量的地址。

C. 结构体的每个字段都是对应的⼀个变量,都可以被取地址 D. 每⼀个值都会有⼀个内存地址

简答题

1. 单个变量声明语法都有哪些?分别是怎样的赋值或者类型的策略。

2. 以表达式new(T)解释⼀下new函数的使⽤。与之对应的普通变量声明语句怎么表达?

分析题

1. 分析下⾯函数的算法

func (x, y int) int { for y != 0 {

x, y = y, x%y }

return x }

2. 对于⼀个字符串s := \"hello, world\"以下打印输出分别是什么,为什么?

对于⼀个字符串s := \"hello, world\"以下打印输出分别是什么,为什么? fmt.Println(s[len(s)]) fmt.Println(s[0:5])fmt.Println(s[:5])fmt.Println(s[7:]) fmt.Println(s[:])

编程题

1. 斐波那契第n个数的函数

答案

选择题

1. 下列说法错误的是: C

A. main包定义了⼀个独⽴可执⾏的⼆进制程序,以main函数作为程序执⾏的⼊⼝。B. 没有导⼊需要的包或者导⼊了不需要的包都会导致编译失败。

C. 不可以在语句或者声明的末尾添加分号,因为编译器会主动将⼀些换⾏符转换为分号。D. 左⼤括号必须在上⼀条语句的⾏末,不可以另起⼀⾏。 解析:

Go语⾔不需要在末尾添加分号,但是添加分号也不影响使⽤,编译器会主动将特定符号后的换⾏符转换为分号。和C语⾔⼀样,分号后⾯的内容不会处理,所以多余的分号不会影响编译。

2. 下列说法错误的是:B

A. Go语⾔可以有多返回值的函数,在获取返回值的时候要全部取得。

B. Go语⾔不能有未使⽤的局部变量和全局变量,这将导致编译错误,但是可以⽤空标识符获得不需要的值从⽽丢弃。C. 函数的形参和有名的返回值都是函数最外层的局部变量。D. 函数内对引⽤类型的形参进⾏修改会影响到实参 解析:

Go语⾔不能有未使⽤的局部变量,但是未使⽤的全局变量和未使⽤的函数的参数是允许的。

3. 下列关于map说法错误的是:C

A. map是键值对的集合,可以提供常数时间的存取操作 B. 键可以是任意类型 C. 值可以是任意类型

D. 如果map中没有⼀个键k1,那么取k1对应的值,其值为对应类型的零值解析:

map的键可以是任何可以⽤==进⾏⽐较的类型,最常见的例⼦是字符串。可以简单的理解map是使⽤==进⾏⽐较键,进⽽使⽤映射取出值。

4. 下列关于switch控制流错误的是:AA. switch不可以紧跟语句或者函数调⽤

B. 不需要在每⼀个case后写break,默认执⾏完case后的语句会⾃动退出。C. switch可以不带操作对象,即不使⽤⽐较的表达式

D. 可以使⽤fallthrough在执⾏完case后的逻辑语句后继续后⾯的case解析:

for和if控制语句⼀样,switch也可以紧跟⼀个简短的变量声明,⼀个⾃增表达式、赋值语句,或者⼀个函数调⽤。switch不带操作对象时默认⽤true值代替,然 后将每个case的表达式和true值进⾏⽐较

5. 下列关于变量和指针错误的是:D

A. ⼀个变量对应⼀个对应类型值的内存空间。B. ⼀个指针的值是另⼀个变量的地址。

C. 结构体的每个字段都是对应的⼀个变量,都可以被取地址 D. 每⼀个值都会有⼀个内存地址解析:

对于聚合类型每个成员——⽐如结构体的每个字段、或者是数组的每个元素——也都是对应 ⼀个变量,因此可以被取地址。并不是每⼀个 值都会有⼀个内存地址,但是对于每⼀个变量必然有对应的内存地址。

简答题

1. 单个变量声明语法都有哪些?分别是怎样的赋值或者类型的策略。答案:

var a int = 1var a int a := 1

如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。如果初始化表达式被省略,那么将⽤零值初始化该变量。

2. 以表达式new(T)解释⼀下new函数的使⽤。与之对应的普通变量声明语句怎么表达?答案:

表达式new(T)将创建⼀个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为 *T 。与a := new(T)相同⾏为的语句var dummy Ta := &dummy

分析题

1. 分析下⾯函数的算法

func (x, y int) int { for y != 0 {

x, y = y, x%y }

return x }

答案:

计算x, y两个数的最⼤公约数的函数(greatest common divisor, GCD)。

x, y = y, x 是元组赋值的⼀种,可以交换两个变量的值,再利⽤辗转相除法求得两个数的最⼤公约数。元组赋值也可以使⼀系列琐碎赋值更加紧凑i, j, k = 2, 3, 5

2. 对于⼀个字符串s := \"hello, world\"以下打印输出分别是什么,为什么?

fmt.Println(s[len(s)])fmt.Println(s[0:5])fmt.Println(s[:5])fmt.Println(s[7:]) fmt.Println(s[:])

答案:

fmt.Println(s[len(s)]) // panic: index out of rangefmt.Println(s[0:5]) // \"hello\"fmt.Println(s[:5]) // \"hello\" fmt.Println(s[7:]) // \"world\" fmt.Println(s[:]) // \"hello, world\"

如果索引超出字符串范围或者j⼩于i的话将导致panic异常。

不管i还是j都可能被忽略,当它们被忽略时将采⽤0作为开始位置,采⽤len(s)作为结束的位置。

编程题

1. 斐波那契第n个数的函数

func fib(n int) int { x, y := 0, 1

for i := 0; i < n; i++ { x, y = y, x+y }

return x }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务