
Go面试题
文章平均质量分 84
程序员贝塔
这个作者很懒,什么都没留下…
展开
-
Go 语言 select 都能做什么?
在 Go 语言中,select是一个关键字,用于监听和channel有关的 IO 操作。通过select语句,我们可以同时监听多个channel,并在其中任意一个channel就绪时进行相应的处理。本文将总结一下select语句的常见用法,以及在使用过程中的注意事项。原创 2023-07-28 20:54:47 · 425 阅读 · 0 评论 -
Go 语言 context 都能做什么?
很多 Go 项目的源码,在读的过程中会发现一个很常见的参数ctx,而且基本都是作为函数的第一个参数。为什么要这么写呢?这个参数到底有什么用呢?带着这样的疑问,我研究了这个参数背后的故事。开局一张图:核心是ContextDone()Err()Deadline()Value()emptyCtxcancelCtxtimerCtx和valueCtx。其中emptyCtx一般情况下,会使用作为根 ctx,然后在其基础上再派生出子 ctx。要是不确定使用哪个 ctx,就使用TODO()。原创 2023-07-02 12:38:04 · 256 阅读 · 0 评论 -
为什么说 Go 语言字符串是不可变的?
最近有读者留言说,平时在写代码的过程中,是会对字符串进行修改的,但网上都说 Go 语言字符串是不可变的,这是为什么呢?这个问题本身并不困难,但对于新手来说确实容易产生困惑,今天就来回答一下。如果一定要这么做的话,需要对字符串进行一个转换,转换成。以上就是本文的全部内容,如果觉得还不错的话欢迎。和切片的结构很像,只不过少了一个表示容量的。切片,然后让指针指向了新的地址。Go 实际上是重新创建了一个。类型,修改之后再转换回。原创 2023-06-02 19:42:00 · 393 阅读 · 0 评论 -
Go 语言 map 如何顺序读取?
Go 语言中的 map 是一种非常强大的数据结构,它允许我们快速地存储和检索键值对。然而,当我们遍历 map 时,会有一个有趣的现象,那就是输出的键值对顺序是不确定的。原创 2023-05-27 09:50:19 · 1220 阅读 · 0 评论 -
Go 语言 map 是并发安全的吗?
因为它没有内置的锁机制来保护多个 goroutine 同时对其进行读写操作。当多个 goroutine 同时对同一个 map 进行读写操作时,就会出现数据竞争和不一致的结果。就像上例那样,当两个 goroutine 同时尝试更新同一个键值对时,最终的结果可能取决于哪个 goroutine 先完成了更新操作。这种不确定性可能会导致程序出现错误或崩溃。Go 语言团队没有将 map 设计成并发安全的,是因为这样会增加程序的开销并降低性能。原创 2023-05-27 09:39:15 · 1502 阅读 · 0 评论 -
为什么 Go for-range 的 value 值地址每次都一样?
循环语句是一种常用的控制结构,在 Go 语言中,除了for关键字以外,还有一个range关键字,可以使用for-range循环迭代数组、切片、字符串、map 和 channel 这些数据类型。但是在使用for-range循环迭代数组和切片的时候,是很容易出错的,甚至很多老司机一不小心都会在这里翻车。具体是怎么翻的呢?我们接着看。原创 2023-04-30 15:07:56 · 760 阅读 · 1 评论 -
Go 语言切片是如何扩容的?
切片扩容通常是在进行切片的append操作时触发的。在进行append操作时,如果切片容量不足以容纳新的元素,就需要对切片进行扩容,此时就会调用growslice函数进行扩容。如果期望容量大于当前容量的两倍就会使用期望容量;如果当前切片的长度小于 1024 就会将容量翻倍;如果当前切片的长度大于 1024 就会每次增加 25% 的容量,直到新容量大于期望容量;如果期望容量大于当前容量的两倍就会使用期望容量;如果当前切片的长度小于阈值(默认 256)就会将容量翻倍;原创 2023-04-09 17:24:34 · 576 阅读 · 1 评论 -
Go 语言数组和切片的区别
数组是一个长度固定的数据类型,其长度在定义时就已经确定,不能动态改变;切片是一个长度可变的数据类型,其长度在定义时可以为空,也可以指定一个初始长度。数组的内存空间是在定义时分配的,其大小是固定的;切片的内存空间是在运行时动态分配的,其大小是可变的。当数组作为函数参数时,函数操作的是数组的一个副本,不会影响原始数组;当切片作为函数参数时,函数操作的是切片的引用,会影响原始切片。切片还有容量的概念,它指的是分配的内存空间。以上就是本文的全部内容,如果觉得还不错的话欢迎转发和关注。原创 2023-04-02 12:00:57 · 600 阅读 · 0 评论 -
Go 语言 new 和 make 关键字的区别
make 只能用来分配及初始化类型为 slice、map 和 chan 的数据。new 可以分配任意类型的数据;new 分配返回的是指针,即类型*Type。make 返回类型本身,即Type;new 分配的空间被清零。make 分配空间后,会进行初始化;以上就是本文的全部内容,如果觉得还不错的话欢迎转发和关注为什么 Go 不支持 []T 转换为 []interface为什么 Go 语言 struct 要使用 tags。原创 2023-03-26 21:06:12 · 391 阅读 · 0 评论