原创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.运算符:程序中用来运算的符号 ...
随机推荐
- linux下的信号量PV操作进阶之路
一.同步和互斥机制 信号量 互斥锁 同步:指多个任务按照约定的先后次序相互配合来完成一件事情. 比如读线程等待写线程写完之后再去读. 二.信号量-P/V操作 P(s)含义: if(信号量>0) ...
- search(6)- elastic4s-CRUD
如果我们把ES作为某种数据库来使用的话,必须熟练掌握ES的CRUD操作.在这之前先更正一下上篇中关于检查索引是否存在的方法:elastic4s的具体调用如下: //删除索引 val rspExists ...
- JavaScript基础笔记1220
JavaScript笔记1.JavaScript关键词2.JavaScript标识符 必须以字母,下划线(_)或美元符($)开始. 后续的字符可以是字母.数字.下划线或者美元符 (数字是不允许作为首字 ...
- Golang Web入门(3):如何优雅的设计中间件
摘要 在上一篇文章中,我们已经可以实现一个性能较高,且支持RESTful风格的路由了.但是,在Web应用的开发中,我们还需要一些可以被扩展的功能. 因此,在设计框架的过程中,应该留出可以扩展的空间,比 ...
- 好用的mitmproxy代理抓包
安装证书 浏览器输入 `mitm.it` 下载证书有时候打不开,可能是起的服务卡死了,回车下命令行,再再网页刷新下载证书就可以了. mitmweb Chrome浏览器代理设置 打开的话,记得保存点一下 ...
- response没有实现跳转,而是提示浏览器下载文件
问题简述: web项目中,response没能实现重定向跳转网页,而是通知浏览器下载文件. 代码如下: response.getWriter().write("<h1 style='c ...
- C#集合类型——Array、ArrayList、List 之浅谈
在学习或工作中,集合是经常用到的,可以换一句话说“无项目无集合”,“项目皆有集合”.它一般存储一系列数据或者将一系列数据进行相关操作.在这里先大略谈一些集合类型的相关知识用于回顾. 数组(Array) ...
- Python selenium Chrome正在受到自动软件的控制 disable-infobars无效 的解决方法
问题解决 前两天更新了google浏览器版本,今天运行以前的脚本,发现options一个参数的配置不生效了. 运行了几次都发现该参数没有生效,也检查了自己的代码参数,没有写错,于是就有了这一波“网中寻 ...
- 数据库SQL---数据库系统概论
1.基本术语 1)信息:指数据加工处理后有用的数据. 2)信息的3种世界: (1)现实世界:存在于人脑之外的客观世界. (2)信息世界:现实世界在人脑中的反映. (3)数据世界:将信息世界中的信息通过 ...
- php---算法和数据结构
<?php header("content-type:text/html;charset=utf-8"); $arr = array(3,5,8,4,9,6,1,7,2); ...