gpt4 book ai didi

syntax - 首选声明/初始化方法

转载 作者:IT王子 更新时间:2023-10-29 00:51:51 25 4
gpt4 key购买 nike

我目前正在玩 Google Go。
有很多方法可以声明和/或初始化变量。
有人可以解释每种方式的优缺点吗(据我所知,示例如下):

    var strArr0 *[10]string = new([10]string)

var strArr1 = new([10]string)

var strArr2 = make([]string,10)

var strArr3 [10]string

strArr4 := make([]string,10)

您首选的语法是什么,为什么?
谢谢,伙计们!

最佳答案

我已将您的示例编号为 1-5,我将在此处逐一介绍。希望这对您有所帮助!

var strArr0 *[10]string = new([10]string)  // (1)

这会分配一个新的字符串数组,长度为 10,并返回指向该数组的指针。

var strArr1 = new([10]string)  // (2)

这与 1 完全相同。它只是简写,由于 Go 的类型推断而起作用。它可以进一步缩短为:

strArr1 := new([10]string)  // (2a)

其中 1、2、2a 都产生完全相同的结果。

var strArr2 = make([]string,10)  // (3)

这会生成长度为 10 的字符串 slice 。 slice 指的是底层数组的某个子集。来自 the golang spec :

The make() call allocates a new, hidden array to which the returned slice value refers.

make([]T, length, capacity)

产生与分配数组和 slice 相同的 slice , 所以这两个示例产生相同的 slice :

make([]int, 50, 100)
new([100]int)[0:50]

所以 3 等同于以下任何一个:

var strArr2 = new([10]string)[0:10]  // Slicing an explicitly created array
var strArr2 []string = new([10]string)[0:10] // Explicitly declaring the type of strArr2, rather than inferring
strArr2 := new([10]string)[0:10] // Using the := shorthand instead of var

new 或 make 的使用取决于您正在创建的类型。 make 仅用于 slice 、 map 和 channel 。他们使用了不同的关键字来传达 make 正在底层初始化一些数据结构的想法,而不仅仅是清零内存。

下一个回到数组而不是 slice :

var strArr3 [10]string  // (4)

这与 1、2 和 2a 相同。

strArr4 := make([]string,10)  // (5)

同3。:=只是初始化变量时的简写,可以推断出类型。


那么选择哪个呢?这有点取决于你的个人风格,但一般来说,一种选择显然会最大限度地提高代码的清晰度,例如当类型很明显时使用类型推断:

foo := bar.ToStringArray()

或在类型不那么重要时声明类型,这样类型将很有用:

var foo []string = bar.DoSomethingOpaque()

对于 slice 和数组,您通常会创建您正在调用的某些函数所需的任何类型。

关于syntax - 首选声明/初始化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3960685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com