2019年Go编程语言面试问题汇总

时间:2019-10-31 作者:golang

2019年Go编程语言面试问题汇总

亲爱的读者,这些Go编程语言面试问题经过专门设计,可让您熟悉在采访中可能遇到的关于Go编程语言主题的问题的性质。根据我的经验,优秀的面试官几乎不打算在面试过程中提出任何特定的问题,通常,问题从该主题的一些基本概念开始,然后根据进一步的讨论和您的回答继续进行:

什么是go语言?
Go是一种专为系统编程而设计的通用语言.Go语言最初由Robert Griesemer,Rob Pike和Ken Thompson于2007年在Google上开发。它是强类型和静态类型的,为垃圾回收提供内置支持,并支持并发编程。程序是使用软件包构建的,用于高效地管理依赖关系。Go编程实现使用传统的编译和链接模型来生成可执行二进制文件。

使用Go编程有什么好处?
以下是使用Go编程的好处-

支持类似于动态语言的环境采用模式。例如,类型推断(x:= 0是int类型的变量x的有效声明)。

编译时间很快。

InBuilt并发支持:轻量级进程(通过goroutines),通道,select语句。

简洁,简单和安全。

支持接口和类型嵌入。

产生静态链接的本机二进制文件,而无需外部依赖。

Go是否支持类型继承?
不支持类型继承。

Go是否支持运算符重载?
不支持操作员重载。

Go是否支持方法重载?
不支持方法重载。

Go是否支持指针算术?
为指针运算的支持。

是否go支持泛型编程?
泛型编程的支持。

Go是区分大小写的语言吗?
是! Go是区分大小写的编程语言。

Go中变量的静态类型声明是什么?
静态类型变量声明为编译器提供了保证,即存在一个具有给定类型和名称的变量,因此编译器可以继续进行进一步的编译,而无需有关该变量的完整详细信息。变量声明仅在编译时具有其含义,编译器在程序链接时需要实际的变量声明。

什么是Go中变量的动态类型声明?
动态类型变量声明要求编译器根据传递给它的值来解释变量的类型。编译器不需要变量就具有静态类型的必要条件。

您可以在Go中的单个声明中声明多种类型的变量吗?
是可以使用类型推断一次性声明不同类型的变量。

var a, b, c = 3, 4, “foo”
如何在Go中打印变量的类型?
以下代码显示变量的类型-

var a, b, c = 3, 4, “foo”
fmt.Printf(“a is of type %T\n”, a)

什么是指针?
它是一个指针变量,可以保存变量的地址。

例如

var x = 5
var p *int
p = &x
fmt.Printf(“x = %d”, *p)
x可以通过* p访问。

break语句的目的是什么?
break终止for循环或switch语句,并在for循环或switch之后立即将执行转移到该语句。

继续声明的目的是什么?
continue使循环跳过其身体的其余部分,并立即重申之前重新测试其条件。

goto语句的目的是什么?
goto将控制权转移到带标签的语句。

解释“ for”循环的语法。
Go编程语言中for循环的语法是

for [condition | ( init; condition; increment ) | Range] {
statement(s);
}

这是for循环中的控制流程

如果条件可用,则只要条件为真,就会执行for循环。

如果for子句是(init; condition;递增),则

首先执行初始化步骤,并且仅执行一次。此步骤允许您声明和初始化任何循环控制变量。只要出现分号,就不需要在此处声明。

接下来,评估条件。如果为true,则执行循环主体。如果为假,则循环主体不执行,并且控制流仅在for循环之后跳转到下一条语句。

在for循环的主体执行之后,控制流跳回到增量语句。该语句允许您更新任何循环控制变量。只要条件后出现分号,该语句就可以留空。

现在将再次评估条件。如果为true,则循环执行并重复执行过程(循环主体,然后是递增步,然后再次是条件)。条件变为假之后,for循环终止。

如果范围可用,则对范围中的每个项目执行for循环。

解释在Go中创建函数的语法。
Go编程语言中的函数定义的一般形式如下-

func function_name( [parameter list] ) [return_types] {
body of the function
}

Go编程语言中的函数定义由函数头和函数体组成。这是函数的所有部分

func func开始函数的声明。

函数名称 -这是函数的实际名称。函数名称和参数列表共同构成函数签名。

参数-参数就像一个占位符。调用函数时,将一个值传递给参数。此值称为实际参数或自变量。参数列表是指函数参数的类型,顺序和数量。参数是可选的;也就是说,一个函数可能不包含任何参数。

返回类型 -函数可以返回值列表。该return_types是数据类型的函数返回值的列表。某些函数执行所需的操作而不返回值。在这种情况下,不需要return_type。

函数体 -函数体包含用于定义函数功能的语句的集合。

您可以从一个函数返回多个值吗?
Go函数可以返回多个值。例如

package main
import “fmt”

func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap(“Mahesh”, “Kumar”)
fmt.Println(a, b)
}

您可以通过几种方式将参数传递给方法?
调用函数时,可以通过两种方式将参数传递给函数

按值调用 -此方法将参数的实际值复制到函数的形式参数中。在这种情况下,对函数内部参数的更改不会对参数产生影响。

通过引用调用-此方法将参数的地址复制到形式参数中。在函数内部,该地址用于访问调用中使用的实际参数。这意味着对参数所做的更改会影响参数。

将参数传递给函数的默认方式是什么?
默认情况下,Go使用按值调用来传递参数。通常,这意味着函数中的代码无法更改用于调用该函数的参数,上面提到的示例在调用max()函数时使用相同的方法。

您在Go中将功能视为价值是什么意思?
Go编程语言可灵活地动态创建函数并将其用作值。我们可以使用函数定义来设置变量,并将其用作函数的参数。

什么是函数闭包?
函数闭包是匿名函数,可以在动态编程中使用。

Go中的方法是什么?
Go编程语言支持称为方法的特殊类型的函数。在方法声明语法中,存在一个“接收器”来表示该函数的容器。该接收器可用于使用“。”调用功能。操作员。

Go中局部变量的默认值是什么?
局部变量具有默认值,因为它对应于0值。

Go中全局变量的默认值是什么?
全局变量具有默认值,因为它对应于0值。

Go中的指针变量的默认值是什么?
指针被初始化为nil。

解释函数Printf()的用途。
打印格式化的输出。

什么是左值和右值?
出现在赋值运算符右侧的表达式称为rvalue。Rvalue被分配给左值,左值出现在赋值运算符的左侧。左值应指定为变量而不是常量。

实际参数和形式参数有什么区别?
在调用端发送给函数的参数称为实际参数,而在接收到函数定义的参数称为形式参数。

变量声明和变量定义有什么区别?
声明将类型与变量关联,而定义将值赋予变量。

说明模块化编程。
将程序划分为子程序(模块/功能)以实现给定的任务是模块化方法。更通用的函数定义使您能够重用这些函数,例如内置库函数。

什么是代币?
Go程序由各种令牌组成,令牌可以是关键字,标识符,常量,字符串文字或符号。

什么是数组?
数组是以通用名称收集相似数据项的。

什么是Go中的零指针?
如果您没有要分配的确切地址,则Go编译器将Nil值分配给指针变量。这是在变量声明时完成的。分配为nil的指针称为nil指针。nil指针是在几个标准库中定义的值为零的常量。

什么是指针指针?
它是一个指针变量,可以保存另一个指针变量的地址。它两次取消引用以指向由指定指针变量保存的数据。

var a int
var ptr *int
var pptr **int
a = 3000
ptr = &a
pptr = &ptr
fmt.Printf(“Value available at **pptr = %d\n”, **pptr)
因此,可以通过** pptr访问“ a”。

Go中的结构是什么?
结构是Go编程中可用的另一种用户定义的数据类型,它允许您组合不同种类的数据项。

如何在Go中定义结构?
要定义结构,必须使用type和struct语句。struct语句定义了一种新的数据类型,该程序具有多个成员。在我们的案例中,type语句将名称与struct绑定在一起。

struct语句的格式如下:

type struct_variable_type struct {
member definition;
member definition;

member definition;
}

Go中的切片是什么?
Go Slice是Go Array的抽象。由于Go Array允许您定义变量类型,这些变量可以容纳相同种类的多个数据项,但是它不提供任何内置方法来动态增加其大小或获得其自身的子数组。切片涵盖了此限制。它提供了Array所需的许多实用程序功能,并广泛用于Go编程中。

如何在Go中定义切片?
要定义切片,您可以将其声明为一个数组而无需指定大小,也可以使用make函数创建一个切片。

var numbers []int /* a slice of unspecified size */
/* numbers == []int{0,0,0,0,0}*/
numbers = make([]int,5,5) /* a slice of length 5 and capacity 5*/

如何获取切片中存在的元素数?
len()函数返回切片中存在的元素。

Go中slice的len()和cap()函数有什么区别?
len()函数返回切片中存在的元素,而cap()函数返回切片可容纳的元素数量。

如何获得切片的子切片?
Slice允许使用[lower-bound:upper-bound]指定下限和上限,以获取其子切片。

Go的范围是多少?
range关键字在for循环中用于迭代数组,切片,通道或映射的项目。对于数组和切片,它以整数形式返回项目的索引。对于地图,它返回下一个键值对的键。

Go中的map是什么?
Go提供了另一个重要的数据类型映射,该映射将唯一键映射到值。键是一个对象,您可以在以后使用它来检索值。给定键和值,您可以将值存储在Map对象中。存储值后,可以使用其键检索它。

如何在Go中创建map?
您必须使用make函数来创建map。

/* declare a variable, by default map will be nil*/
var map_variable map[key_data_type]value_data_type

/* define the map as nil map can not be assigned any value*/
map_variable = make(map[key_data_type]value_data_type)

如何在Go中从map中删除条目?
delete()函数用于从地图中删除条目。它需要映射和要删除的对应密钥。

Go中的类型转换是什么?
类型转换是一种将变量从一种数据类型转换为另一种数据类型的方法。例如,如果要将长值存储为简单整数,则可以将强制类型转换为整数。您可以使用强制转换运算符将值从一种类型转换为另一种类型,如下所示:

type_name (表达式)

Go中的接口是什么?
Go编程提供了另一种称为接口的数据类型,它表示一组方法签名。struct数据类型实现这些接口以具有接口定义方法的方法定义。

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:2100506673@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。