教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 golang 数组面试题

golang 数组面试题

发布时间:2021-12-27   编辑:jiaochengji.com
教程集为您提供golang 数组面试题等资源,欢迎您收藏本站,我们将为您提供最新的golang 数组面试题资源
<h2>第一题 <code>array</code> append扩容问题</h2>

实例代码<code>array_append.go</code>

<pre><code class="language-go">\/** * Author: JeffreyBool * Date: 2019\/4\/17 * Time: 16:16 * Software: GoLand *\/ package array \/** * arr 底层扩容知识点 *\/ func ArrayAppend() []int { arr := make([]int,5) arr = append(arr,10) \/\/问现在 arr 结果是什么 return arr }</code></pre>

测试代码<code>array_append_test.go</code>

<pre><code class="language-go">\/** * Author: JeffreyBool * Date: 2019\/4\/17 * Time: 16:18 * Software: GoLand *\/ package array import ( "testing" ) func TestArray_append(t *testing.T) { arr := ArrayAppend() t.Log(arr) }</code></pre> <h3>本题讲解</h3> <h4><code>make</code> 函数</h4>

<code>make</code> 也是内建函数,你可以从 http:\/\/golang.org\/pkg\/builtin\/#make 看到它, 它的函数原型 比 <code>new</code> 多了一个(长度)参数,返回值也不同。
函数原型是

<pre><code class="language-go">func make(Type, size IntegerType) Type </code></pre> <ul><li>第一个参数是一个类型,第二个参数是长度</li><li>返回值是一个类型</li></ul>

官方描述为:

<blockquote>

The make built-in function allocates and initializes an object(分配空间 初始化) of type slice, map or chan(only). Like new , the first arguement is a type, not a value. Unlike new, make’s return type is the same as the type of its argument, not a pointer to it. The specification of the result depends on the type.
翻译为:
内建函数 make 分配并且初始化 一个 slice, 或者 map 或者 chan 对象。 并且只能是这三种对象。 和 new 一样,第一个参数是 类型,不是一个值。 但是make 的返回值就是这个类型(即使一个引用类型),而不是指针。 具体的返回值,依赖具体传入的类型。

Slice : 第二个参数 size 指定了它的长度,此时它的容量和长度相同。
你可以传入第三个参数 来指定不同的容量值,但是必须不能比长度值小。
比如: make([]int, 0, 10)
Map: 根据size 大小来初始化分配内存,不过分配后的 map 长度为0。 如果 size 被忽略了,那么会在初始化分配内存的时候 分配一个小尺寸的内存。
Channel: 管道缓冲区依据缓冲区容量被初始化。如果容量为 0 或者被 忽略,管道是没有缓冲区的。

</blockquote> <ul><li>根据上面 make 的解释我们可以得知Slice可以设定三个参数, 第一个是类型,第二个是长度,第三个是大小, 当Slice 大小不够了会自动扩容.</li></ul><pre><code class="language-go">arr := make([]int,5) \/\/实际译为 arr := make([]int,5,5)</code></pre>

arr 的大小,长度都为5.

我们将代码稍微改良下:

<pre><code class="language-go">\/** * Author: JeffreyBool * Date: 2019\/4\/17 * Time: 16:16 * Software: GoLand *\/ package array import ( "fmt" ) \/** * arr 底层扩容知识点 *\/ func ArrayAppend() []int { arr := make([]int,5) fmt.Printf("arr.len: %d; arr.cap: %d \n</code></pre> 到此这篇关于“golang 数组面试题”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang基础教程
连nil切片和空切片一不一样都不清楚?那BAT面试官只好让你回去等通知了
golang面试题之找出数组切片中 出现次数 大于 切片长度一半的元素
Golang template 高级问题
Golang面试题总结
Golang面试题 数组和切片的区别
go golang 笔试题 面试题 笔试 面试
Golang 高频面试题七问
golang面试官:for select时,如果通道已经关闭会怎么样?如果select中只有一个case呢?
连怎么避免内存逃逸都不知道?怎么进BAT?

[关闭]
~ ~