原创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.运算符:程序中用来运算的符号 ...
随机推荐
- Docker安装Redis并介绍漂亮的可视化客户端进行操作
1 简介 Redis是使用ANSI C语言开发的基于Key-Value的高性能NoSQL数据库,在解决高并发.高可用等一系列问题中,它扮演着重要的角色.它的优势主要有: 速度快. 持久化. 原子性. ...
- 数据结构与算法--树(tree)结构
树 二叉树 遍历原则:前序遍历是根左右, 中序遍历是左根右,后序遍历是左右根. 二叉搜索树 特点:对于树中的每个节点X,它的左子树中所有节点的值都小于X,右子树中所有节点的值都大于X. 遍历:采取二叉 ...
- Python父类和子类关系/继承
#!/usr/bin/env python # -*- coding: utf-8 -*- """ @File:继承_子类和父类的关系.py @E-mail:364942 ...
- 使用 selenium 实现谷歌以图搜图爬虫
使用selenium实现谷歌以图搜图 实现思路 原理非常简单,就是利用selenium去操作浏览器,获取到想要的链接,然后进行图片的下载,和一般的爬虫无异. 用到的技术:multiprocessing ...
- Docker数据管理(一)
数据卷挂载 在生产环境中,需要对数据进行持久化,冗余化,或者在需要在多个容器之间进行数据共享 数据卷:容器内数据直接映射到本地主机环境 数据卷容器:使同特定容器维护数据卷 -v 进行映射 1.在容器内 ...
- 突然地心血来潮,为 MaixPy( k210 micropython ) 添加看门狗(WDT) C 模块的开发过程记录,给后来的人做开发参考。
事情是前几天群里有人说做个看门狗不难吧,5分钟的事情,然后我就怼了几句,后来才发现,原来真的没有看门狗模块鸭. 那好吧,那我就写一下好了,今天是(2020年4月30日)想着最后一天了,不如做点什么有价 ...
- 【Linux常见命令】route命令
route - show / manipulate the IP routing table route命令用于显示和操作IP路由表. route命令用来显示并设置Linux内核中的网络路由表,rou ...
- I/O多路复用之select,poll,epoll简介
一.select 1.起源 select最早于1983年出现在4.2BSD中(BSD是早期的UNIX版本的分支). 它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回 ...
- JAVA进程CPU高的解决方法
无限循环的while会导致CPU使用率飙升吗?经常使用Young GC会导致CPU占用率飙升吗?具有大量线程的应用程序的CPU使用率是否较高?CPU使用率高的应用程序的线程数是多少?处于BLOCKED ...
- Mina Basics 02-基础
基础 在第1章中,我们简要介绍了Apache MINA.在本章中,我们将了解客户端/服务器体系结构以及有关基于MINA的服务器和客户端的详细信息. 我们还将基于TCP和UDP公开一些非常简单的服务器和 ...