Go 语言笔试面试题:基础篇(01)

作者: 王炳明 分类: Python 教程 发布时间: 2021-03-10 22:36 热度:4,136

1. = 和 := 的区别

在对一个变量进行赋值前,首先要声明其类型。

// 声明
var age int

// 赋值
age = 18

而这两行代码其实可以使用 := 来合并成一行代码

age := 18

因此它们的区别是

  • = 是赋值
  • := 是声明并赋值

2. 指针的作用

普通的变量,存储的是数据,而指针变量,存储的是数据的内存地址。

学习指针,主要有两个运算符号,要记牢

  • &:地址运算符,从变量中取得值的内存地址
// 定义普通变量并打印
age := 18
fmt.Println(age) //output: 18

ptr := &age
fmt.Println(ptr) //output: 
  • *:解引用运算符,从内存地址中取得存储的数据
myage := *ptr
fmt.Println(myage) //output: 18

3. Go 允许多个返回值吗?

允许,以下是使用示例

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("A", "B")
   fmt.Println(a, b) // B A
}

4. Go 有异常类型吗?

在解答这个问题前,有必要对错误和异常做一个解释

  • 错误:指的是可能出现问题的地方出现了问题,比如打开一个文件时失败,这种情况在人们的意料之中 ;
  • 异常:指的是不应该出现问题的地方出现了问题,比如引用了空指针,这种情况在人们的意料之外。

在 Go 没有异常类型,只有错误类型(Error)。

一个函数要是想返回错误,通常会使用返回值来表示异常状态,它很像 C语言中的错误码,可逐层返回,直到被处理。

f, err := os.Open("test.txt")
if err != nil {
    log.Fatal(err)
}

Go 语言中虽然没有异常的概念,但是却有更为恐怖的 panic ,由于有了 recover,在一定程度上, panic 可以类比做异常。

Golang错误和异常(panic)是可以互相转换的:

  1. 错误转异常:比如程序逻辑上尝试请求某个URL,最多尝试三次,尝试三次的过程中请求失败是错误,尝试完第三次还不成功的话,失败就被提升为异常了。
  2. 异常转错误:比如panic触发的异常被recover恢复后,将返回值中error类型的变量进行赋值,以便上层函数继续走错误处理流程。

5. 什么是 rune 类型?

rune 可以理解成一个字符,比如 a 都是一个字符。

rune,占用4个字节,共32位比特位,所以它和 uint32 本质上也没有区别。它表示的是一个 Unicode字符(Unicode是一个可以表示世界范围内的绝大部分字符的编码规范)。

var a byte = 'A'
var b rune = 'B'
fmt.Printf("a 占用 %d 个字节数\nb 占用 %d 个字节数", unsafe.Sizeof(a), unsafe.Sizeof(b))

// output
a 占用 1 个字节数
b 占用 4 个字节数

文章有帮助,请作者喝杯咖啡?

发表评论