Golang学习:基础篇练习(二)—— 数组切片小实验

编程入门 行业动态 更新时间:2024-10-19 08:45:48

Golang学习:基础篇练习(二)—— <a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组切片小实验"/>

Golang学习:基础篇练习(二)—— 数组切片小实验

Golang学习:基础篇练习(二)—— 数组切片小实验

本次实验是对数组切片的,目的就是为了加深理解,一起来看看吧。

1、下面这段代码有问题吗?为什么

func main() {greeting := make([]string, 3, 5)// 3 is length - number of elements referred to by the slice// 5 is capacity - number of elements in the underlying arraygreeting[0] = "Good morning!"greeting[1] = "Bonjour!"greeting[2] = "buenos dias!"greeting[3] = "suprabadham"fmt.Println(greeting[2])
}

答:运行报错,因为我们试图访问切片 greeting 的第4个元素(索引为3),但是该切片的长度只有3。尽管 greeting 的容量为5,但是在创建切片时,只初始化了3个元素。但是我们可以通过 append 函数来添加更多的元素。以下是修改后的代码:

func main() {greeting := make([]string, 3, 5)// 3 is length - number of elements referred to by the slice// 5 is capacity - number of elements in the underlying arraygreeting[0] = "Good morning!"greeting[1] = "Bonjour!"greeting[2] = "buenos dias!"greeting = append(greeting, "suprabadham")fmt.Println(greeting[2])
}

2、将一个切片数组的值添加到另一个切片数组中

func main() {mySlice := []int{1, 2, 3, 4, 5}myOtherSlice := []int{6, 7, 8, 9}mySlice = append(mySlice, myOtherSlice...)fmt.Println(mySlice)
}

解释一下这三个点:…操作符被用于切片参数的函数调用,它可以将一个切片的元素作为变参传递给函数。append函数接受两个或更多的参数,第一个参数是一个切片,后面的参数是将要添加到切片的元素。当想要将一个切片的所有元素添加到另一个切片时,就需要使用…操作符。

…操作符将myOtherSlice切片展开,然后将其元素作为变参添加到mySlice切片中。如果没有…操作符,代码会报错,因为append函数期望的是一系列的单个元素,而不是一个切片。

3、判断一下下面两个用例中fmt.Println(student == nil)的输出结果

// one
func main() {student := []string{}students := [][]string{}fmt.Println(student)fmt.Println(students)fmt.Println(student == nil)
}// two
func main() {var student []stringvar students [][]stringfmt.Println(student)fmt.Println(students)fmt.Println(student == nil)
}// three
func main() {student := make([]string, 35)students := make([][]string, 35)fmt.Println(student)fmt.Println(students)fmt.Println(student == nil)
}

答案是:false、true、false

为什么呢 ?在代码示例中,使用了一个空的切片字面量来初始化student。虽然这个切片没有包含任何元素,但它已经被分配了内存(第三个例子同理)。因此,它不是nil。而第二个声明了一个切片student,但没有给它分配内存,所以它的值是nil

4、下面这段代码能正常运行吗?

func main() {student := []string{}students := [][]string{}student[0] = "Todd"fmt.Println(student)fmt.Println(students)
}

答:这段代码创建了一个空切片 student。这个切片的长度和容量都是0。尽管切片背后的数组可能会随着元素的添加而增长,但是在添加元素之前,不能访问任何元素。因此,当试图访问 student[0] 时,Go语言会抛出一个运行时错误,因为这个元素并不存在。

所以,我们不能直接访问或修改它的元素,即使试图访问的是第一个元素。如果你想要向空切片中添加元素,应该使用append函数。例如,可以将student[0] = "Todd"这一行修改为student = append(student, “Todd”)

同理,下面这种写法也会报错

func main() {var student []stringvar students [][]stringstudent[0] = "Todd"// student = append(student, "Todd")fmt.Println(student)fmt.Println(students)
}

来看看一个正确的实例:

func main() {//student := make([]string, 35)这一行创建了一个长度为35的字符串切片,所有元素都被初始化为字符串的零值(即空字符串)。//所以,当写student[0] = "Todd"时,是在修改切片的第一个元素,这是完全合法的。//同样,students := make([][]string, 35)这一行创建了一个长度为35的切片,每个元素都是一个字符串切片。所有元素都被初始化为切片的零值(即nil切片)。//所以,代码不会报错,因为没有访问或修改超出切片长度范围的元素student := make([]string, 35)students := make([][]string, 35)// the result is differentstudent[0] = "Todd"// student = append(student, "Todd")fmt.Println(student)fmt.Println(students)
}

那么以上就是本次的内容了,在学习的过程中,可以多去敲敲代码,熟悉一下。也可以去菜鸟教程上面多看看,对新人挺友好的,也是我的公司同事推荐的教程网站。

后续也会不定期更新学习记录和一些学习实验。🤠

更多推荐

Golang学习:基础篇练习(二)—— 数组切片小实验

本文发布于:2023-12-08 11:59:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672719.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   切片   基础   Golang

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!