酷代码 AI
菜单
GO-大厂面试题库,由浅入深
  • 作为golang开发,go语言触发异常的场景有哪些 ?(359点数解答 | 2023-11-09 18:16:46)

    在Go语言中,触发异常的场景通常包括以下几种情况: 1. 运行时错误:Go语言的运行时系统可能会触发异常,例如内存溢出、空指针引用等。这些异常通常会导致程序崩溃,并且可以在代码中使用`recover`函数来捕获并处理这些异常。 2. 类型转换错误:当进行类型转换时,如果转换失败或不合法,就会触发异常。例如,将一个字符串转换为整数,但字符串中包含非数字字符,就会导致类型转换失败并触发异常。 3. 函数返回错误:Go语言中的函数在执行过程中可能会遇到错误,并返回错误值。开发者需要在调用函数时检查错误并妥善处理。通常可以使用条件语句或错误处理机制来捕获和处理这些错误。 4. 空指针引用:当尝试使用

    71 0
  • 作为golang开发,go在循环内部执行defer语句会发生啥 ?(324点数解答 | 2023-11-09 18:16:43)

    在Go语言中,`defer`语句用于延迟执行一个函数调用,通常用于在函数退出前执行一些清理操作。如果你在循环内部执行`defer`语句,每次循环迭代都会延迟执行该函数调用,直到循环结束为止。 下面是一个示例代码,演示了在循环内部使用`defer`语句的情况: ```go package main import ( "fmt" "time" ) func main() { for i := 0; i < 5; i++ { fmt.Println("Iteration:", i) defer fmt.Println("Deferred statement:", i) time

    83 0
  • 作为golang开发,闭包错误引用同一个变量问题怎么处理 ?(446点数解答 | 2023-11-09 18:16:40)

    在Go语言中,闭包(closure)是指一个函数值(function value),它引用了自己函数体之外的变量。当闭包引用了同一个变量时,可能会出现错误,因为在闭包内部修改该变量会影响到外部的作用域。为了避免这种情况,可以采取以下处理方式: 1. 使用一个新的变量:为了避免错误引用同一个变量,可以创建一个新的变量,并将闭包内的引用更改为新变量。这样,每个闭包都有自己的新变量的副本,不会互相干扰。 ```go func outer() func() int { count := 0 return func() int { count++ r

    76 0
  • 作为golang开发,golang 如何打包到docker运行 ?(477点数解答 | 2023-11-09 18:16:38)

    要将Go应用程序打包到Docker容器中并运行,您可以按照以下步骤进行操作: 1. 确保您已经安装了Docker和Go环境,并且您的Go应用程序可以成功构建。 2. 在您的Go项目根目录下创建一个名为`Dockerfile`的文件。Dockerfile是用于构建Docker镜像的文本文件。 3. 在`Dockerfile`中,添加以下内容: ```Dockerfile # 使用官方提供的Go镜像作为基础镜像 FROM golang:latest # 将当前目录下的所有文件复制到容器的/app目录下 COPY . /app # 设置工作目录 WORKDIR /app # 构建可执行文

    125 0
  • 作为golang开发,简述 golang 记录日志的实现方式 ?(439点数解答 | 2023-11-09 18:16:36)

    在Go语言中,记录日志的实现方式通常使用标准库中的"log"包。以下是使用Go记录日志的基本步骤: 1. 导入"log"包:在Go文件的开头,导入"log"包,以便使用日志功能。 ```go import "log" ``` 2. 创建日志文件:使用"log"包中的"New"函数创建一个日志文件。可以指定日志文件的名称和日志级别。 ```go file, err := os.OpenFile("myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { log.Fatalf("Failed cr

    131 0
  • 作为golang开发,解释go recover的执行时机 ?(364点数解答 | 2023-11-09 18:16:33)

    在Go语言中,`recover`是用于捕获和处理程序中的 panic 的内建函数。它的执行时机是在程序遇到 panic 时。 当程序中出现 panic 时,Go 运行时会首先执行当前协程中的延迟函数(defer),然后开始展开(unwind)调用堆栈,直到找到适当的 `recover` 调用为止。 `recover` 函数只能在延迟函数中调用,并且只有在发生 panic 时才会生效。它会停止 panic 的展开过程,并返回传递给 panic 的值(如果有的话)。如果没有 panic 发生,或者 `recover` 不在延迟函数中调用,它将返回 nil。 以下是 `recover` 的执行

    68 0
  • 作为golang开发,grpc报错rpc error:code=deadlineexceeded desc = context deadline exceeded ?(376点数解答 | 2023-11-09 18:16:31)

    当你在使用Go语言开发gRPC应用时遇到了 "rpc error: code=deadlineexceeded desc=context deadline exceeded" 这个错误,通常是由于客户端在给定的时间内无法从服务器获取响应。 这个错误可能由以下几个原因导致: 1. 服务器处理请求的时间超过了客户端设置的超时时间。你可以尝试增加客户端的超时时间,看看是否可以解决问题。在客户端代码中,你可以设置一个更长的时间,比如几秒或者几十秒: ```go ctx, cancel := context.WithTimeout(context.Background(), time.Secon

    181 0
  • 作为golang开发,gc 中 stw 时机,各个阶段是如何解决的?(389点数解答 | 2023-11-09 18:16:25)

    在Go语言的垃圾回收(GC)中,"stw"是指Stop-The-World,即暂停所有Go协程的执行,以便进行垃圾回收。在stw期间,没有新的垃圾被分配,也没有新的对象被创建。 在Go语言的垃圾回收中,stw的时机取决于以下几个阶段: 1. Mark Phase(标记阶段):这是stw开始的地方。在这个阶段,垃圾回收器会暂停所有Go协程的执行,并开始遍历堆中的所有对象,标记那些仍然被引用的对象。这个阶段是stw期间最长的部分,因为它需要遍历整个堆。 2. Sweep Phase(清扫阶段):一旦标记阶段完成,垃圾回收器会释放未被标记的对象所占用的内存空间,并把这块内存标记为可用。这个阶段不

    343 0
  • 作为golang开发,golang中defer和return执行的先后顺序 ?(244点数解答 | 2023-11-09 18:16:20)

    在Go语言中,`defer`语句和`return`语句的执行顺序是先执行`defer`语句,然后再执行`return`语句。 `defer`语句用于延迟(推迟)一个函数的执行,直到包含它的函数返回之前。无论函数是通过正常返回还是由于`panic`引发的恐慌,`defer`语句都会被执行。 下面是一个示例代码,演示了`defer`和`return`的执行顺序: ```go package main import "fmt" func main() { defer fmt.Println("defer statement") fmt.Println("before re

    73 0
  • 作为golang开发,go 是 gc 算法是怎么实现的?(373点数解答 | 2023-11-09 18:16:19)

    Go 语言的垃圾回收(GC)算法是一种名为 "Generational" 的垃圾回收算法,它主要分为三个阶段: 1. 标记阶段:在这个阶段,垃圾回收器会标记出所有活跃的(正在被使用的)对象。这个过程是从一些根对象(例如全局变量、线程栈等)开始,递归地标记所有引用的对象。任何没有被标记的对象将被视为垃圾,等待被回收。 2. 清除阶段:在这个阶段,垃圾回收器会释放那些被标记为垃圾的对象的内存。在 Go 语言中,这个阶段会释放所有的内存,而不仅仅是那些被标记为垃圾的对象。 3. 压缩阶段:在这个阶段,垃圾回收器会将剩余的对象移动到一起,以尽可能减少内存的使用。这个阶段也被称为 "compactio

    103 0