原创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后的逻辑语句后继续后面的case
5. 下列关于变量和指针错误的是:
A. 一个变量对应一个对应类型值的内存空间。
B. 一个指针的值是另一个变量的地址。
C. 结构体的每个字段都是对应的一个变量,都可以被取地址
D. 每一个值都会有一个内存地址
简答题
1. 单个变量声明语法都有哪些?分别是怎样的赋值或者类型的策略。
2. 以表达式new(T)解释一下new函数的使用。
与之对应的普通变量声明语句怎么表达?
分析题
1. 分析下面函数的算法
func gcd(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控制流错误的是:A
A. 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 = 1
var a int
a := 1
如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。如果初始化表达式被省略,那么将用零值初始化该变量。
2. 以表达式new(T)解释一下new函数的使用。
与之对应的普通变量声明语句怎么表达?
答案:
表达式new(T)将创建一个T类型的匿名变量,初始化为T类型的零值,然后返回变量地址,返回的指针类型为 *T 。
与a := new(T)相同行为的语句
var dummy T
a := &dummy
分析题
1. 分析下面函数的算法
func gcd(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 range
fmt.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
}
原创Go语言题目(基础)的更多相关文章
- c语言学习基础:[1]开发工具介绍
标签:c语言 1 2 3 4 分步阅读 学习编程语言的童鞋们一开始接触到的最多的估计就是C语言了,其次才是什么java.c++等,可以说学习c语言是我们走向编程世界的一座桥梁,学好它,对于我们学习和研 ...
- iOS开发系列--C语言之基础知识
概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...
- Golang友团无闻Go语言Web基础视频教程
教程内容:GO语言资料Golang友团无闻Go语言编程基础Golang友团无闻Go语言Web基础教程 Go语言Web基础教程列表:[Go Web基础]12Go Web 扩展学习.mp4[Go Web基 ...
- 10个经典的C语言面试基础算法及代码
10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...
- Linux基础与Linux下C语言编程基础
Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...
- LINUX下C语言编程基础
实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...
- Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识
JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...
- 关于JS脚本语言的基础语法
JS脚本语言的基础语法:输出语法 alert("警告!"); confirm("确定吗?"); prompt("请输入密码");为弱 ...
- 2.4JAVA基础复习——JAVA语言的基础组成数组
JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...
随机推荐
- L2 Softmax与分类模型
softmax和分类模型 内容包含: softmax回归的基本概念 如何获取Fashion-MNIST数据集和读取数据 softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集 ...
- linux通过进程名查看其占用端口
1.先查看进程pid ps -ef | grep 进程名 2.通过pid查看占用端口 netstat -nap | grep 进程pid 参考: https://blog.csdn.net/sinat ...
- 基于 HTML5 WebGL 的高炉炼铁厂可视化系统
前言 在当今 工业4.0 新时代的推动下,不仅迎来了 工业互联网 的发展,还开启了 5G 时代的新次元.而伴随着带宽的提升,网络信息飞速发展,能源管控上与实时预警在工业互联网中也占着举足轻 ...
- 从零开始学习docker之在docker中运行springboot项目
一.docker环境配置 首先需要一个安装了docker的服务器(本地或者云服务器),如果没有请看上文,传送门---https://www.cnblogs.com/wdfordream/p/12737 ...
- Mysql链接查询
连接查询--交叉连接将两张表的数据与另外一张表彼此交叉原理:1. 从第一张表一次取出每一条记录2. 取出每一条记录之后,与另外一张表的全部记录挨个匹配3. 没有任何匹配条件,所有的结果都会进行保留4. ...
- c++使用cin、cout与c中使用scanf、printf进行输入输出的效率问题
在c++中,我们使用cin和cout进行输入输出会比用scanf和printf更加简洁和方便,但是当程序有大量IO的时候,使用cin和cout进行输入输出会比用scanf和printf更加耗时, 在数 ...
- Java初学者最近三次作业的心得体会
作为一个初学者,简单的谈一下自己的作业心得体会.如果你是完全没有接触过Java的学习,本篇博文可能会有些收获,如果你已经学习Java有一段时间了,那么可以放弃这篇文章了,因为这篇文章讲解的是基本的东西 ...
- mycat入门部署安装
mycat是一种比较简单的中间件产品,可以帮助mysql进行分库,同时统一在一个逻辑库. 硬件环境:系统:centos 7.6数据库版本:5.7.19mycat:1.6..6.1 github上下载m ...
- 本周ASP.NET英文技术文章推荐[02/03 - 02/16]:MVC、Visual Studio 2008、安全性、性能、LINQ to JavaScript、jQuery...
摘要 继续坚持,继续推荐.本期共有9篇文章: 最新的ASP.NET MVC框架开发计划 Visual Studio 2008 Web开发相关的Hotfix发布 ASP.NET安全性教程系列 ASP.N ...
- VMware虚拟机中centos6.5网络配置(桥接方式)与宿主机之间通信
1.修改网络适配器 2.选择桥接所用的网卡 3.设置网络 3.1在系统终端中输入 setup ,进行图形网络配置(此命令只有redhat系列才有作用) 上下左右键选择,enter键确定 将光标移动到U ...