题目内容来源于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语言题目(基础)的更多相关文章

  1. c语言学习基础:[1]开发工具介绍

    标签:c语言 1 2 3 4 分步阅读 学习编程语言的童鞋们一开始接触到的最多的估计就是C语言了,其次才是什么java.c++等,可以说学习c语言是我们走向编程世界的一座桥梁,学好它,对于我们学习和研 ...

  2. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  3. Golang友团无闻Go语言Web基础视频教程

    教程内容:GO语言资料Golang友团无闻Go语言编程基础Golang友团无闻Go语言Web基础教程 Go语言Web基础教程列表:[Go Web基础]12Go Web 扩展学习.mp4[Go Web基 ...

  4. 10个经典的C语言面试基础算法及代码

    10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...

  5. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  6. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  7. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  8. 关于JS脚本语言的基础语法

    JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱 ...

  9. 2.4JAVA基础复习——JAVA语言的基础组成数组

    JAVA语言的基础组成有: 1.关键字:被赋予特殊含义的单词. 2.标识符:用来标识的符号. 3.注释:用来注释说明程序的文字. 4.常量和变量:内存存储区域的表示. 5.运算符:程序中用来运算的符号 ...

随机推荐

  1. Spring Cloud 系列之 Gateway 服务网关(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一) 本篇文章讲解 Gateway 网关的多种路由规则.动态路由规则(配合服务发现的路由规则 ...

  2. spring源码阅读笔记09:循环依赖

    前面的文章一直在研究Spring创建Bean的整个过程,创建一个bean是一个非常复杂的过程,而其中最难以理解的就是对循环依赖的处理,本文就来研究一下spring是如何处理循环依赖的. 1. 什么是循 ...

  3. 【转帖】Python 重复造轮子/造轮子找模子,你都应该熟读该文

    Chardet,字符编码探测器,可以自动检测文本.网页.xml的编码. colorama,主要用来给文本添加各种颜色,并且非常简单易用. Prettytable,主要用于在终端或浏览器端构建格式化的输 ...

  4. QT 的 parent 该如何理解

    对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示.QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件. QWidget是所有窗 ...

  5. ThinkJS前端搭配vue时的Nginx配置

    Thinkjs 作为奇舞团开源的nodejs mvc框架之一,引起了很多NodeJS程序员的亲赖.但是其关于静态文件处理部分支持不够完善,主要是体现在SPA单页应用,之前在ThinkJS 2.*版本时 ...

  6. Fedora 21下lingo14配置

    Install lingo14 during Fedora 21 The first step:Download lingo14Download address:http://www.lindo.co ...

  7. 对 spring 中默认的 DataSource 创建进行覆盖

    配置如下 /** * Primary:标识为主配置,将默认的配置覆盖掉 * ConfigurationProperties:设置配置来源 * * @return DataSource */ @Prim ...

  8. 如何在github上递交高质量的pull request

    开源的一大乐趣就是任何人都可以参与其中.试想下一个流行的项目就有你贡献的代码,是一件多么爽的事情!你可以帮助项目健康发展,添加你希望添加的功能,以及修复你发现的BUG. 作为全球最大的开源社区GitH ...

  9. ES6中Fetch的封装及使用,炒鸡简单~

    之前写过一篇<ajax.axios.fetch之间的详细区别以及优缺点> 戳这里 1.封装 (http.js) class Ajax { get(url) { return new Pro ...

  10. 《OSPF和IS-IS详解》一1.5 ARPANET内的路由选择

    本节书摘来异步社区<OSPF和IS-IS详解>一书中的第1章,第1.5节,作者: [美]Jeff Doyle 译者: 孙余强 责编: 傅道坤,更多章节内容可以访问云栖社区"异步社 ...