切片注意事项和细节(3) | 学习笔记

简介: 简介:快速学习切片注意事项和细节(3)

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map :切片注意事项和细节(3)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9642


切片注意事项和细节(3)

 

内容介绍

一、切片的拷贝操作

二、切片是引用类型,遵守引用传递机制


一、切片的拷贝操作

1.切片使用 copy 内含子函数完成拷贝

举例说明:
func main(){

var a[]int=[](1,2,3,4,5)

var slice =make([]int,10)

fmt.Println(slice)

copy(slice,a)

fmt.Println(slice)

说明: copy(para1, para2): para1 和 para2 都是切片类型。

2.关于拷贝的注意事项,思考题:
下面的代码有没有错误:

var a[]int = []int {1,2,3,4,5} //这里有一个切片a,它是1,2,3,4,5

var slice= make([]int,1)  //切片长度定为1

fmt.Println(slice)  //应该输出一个[0]

copy(slice,a)  //这里是拷贝操作,把a拷贝给 slice;a 和 slice 的元素不同也能拷贝,slice 的元素没有大也不会报错,它只会找到a的第一个元素拷贝给 slice

fmt.Println(slice)  //输出为[1]

说明:上面的代码没有问题,可以运行,最后输出的结果是[1]

切片是引用类型,所以在传递时,遵守引用传递机制。看两段代码,并分析底层原理。

 

二、切片是引用类型,遵守引用传递机制

切片是引用类型,所以在传递时,遵守引用传递机制。看两段代码,并分析底层原理。

1.题1:

func main(){

var slice[]int  //声明了一个切片,此切片不可用,因为此切片没有空间

var arr [5]int =[..]int {1,2,3.4.5)slice= arr[:]  //这是有五个元素的一个整形数组

var slice2 = slice  //将slice交给slice2;也就是说slice和slice2都指向了这个数组

slice2[0]= 10  //通过slice2改变的10

fmt.Println("siice2",slice2)//?  slice2输出是多少- [10,2,3,4,5]

fmt.Println("slice", slice)//?slice输出是多少- [10,2,3,4,5]

fmt.Println("arr", arr)//?arr输出是多少- [10,2,3,4,5]

新建一个文件夹名为 slice,再在此文件下新建一个 main.go;在原代码基础上加上以下代码:

package main

Import (

“fmt”

运行结果如下:

image.png

结果与分析相同

2.题2:

func test(slice int) {   //把切片传递给了一个函数,这个函数也是一个切片

slice[0] = 100  //这里修改slice[0].会改变实参)

func main( ){

var slice= []int {1,2,3,4}  //有一个slice切片

fmt.Println("slice=",slice)// ? 打印出来的结果[1,2,3,4]

test(slice)  //调函数

fmt.Println("slice=", slice)// 这时slice输出什么内容,结果为[100,2,3,4]

}

//因为 slice 是引用类型,test(slice)”传递出去的即是地址,也就是“test(slice)”和“var slice”(主函数slice)是同一个 slice,里面的 slice 是指向外面的 slice的,因此在里面的修改会影响到实参

运行测试结果代码如下:

package main

import (

"fmt"

func test(slice []int) {

slice[0] = 100

func main() {

var slice = [ ]int {1,2,3,4}

fmt.Print1n("slice=", slice)// [1,2,3,4]

test(slice)

fmt.Println( "slice=", slice)// [100,2,3,4]

}

运行结果如下:

image.png

运行结果与分析结果相同

相关文章
|
Go 索引
终于学会使用Go语言切片 切片操作看这里就够了
终于学会使用Go语言切片 切片操作看这里就够了
65 1
终于学会使用Go语言切片 切片操作看这里就够了
|
7月前
|
NoSQL 安全 API
【Redi设计与实现】第二章:简单动态字符串
【Redi设计与实现】第二章:简单动态字符串
|
程序员 Go 开发者
使用切片的区别分析|学习笔记
快速学习使用切片的区别分析。
114 0
使用切片的区别分析|学习笔记
|
编译器 Scala 开发者
函数使用注意事项和细节2|学习笔记
快速学习函数使用注意事项和细节2。
|
存储 程序员 Go
切片注意事项和细节(2) | 学习笔记
简介:快速学习切片注意事项和细节(2)
143 0
切片注意事项和细节(2) | 学习笔记
|
Go 开发者
切片注意事项和细节(1) | 学习笔记
简介:快速学习切片注意事项和细节(1)
132 0
切片注意事项和细节(1) | 学习笔记
|
Go vr&ar 开发者
数组注意事项和细节(2)|学习笔记
快速学习数组注意事项和细节(2)。
135 0
数组注意事项和细节(2)|学习笔记
|
程序员 Go 开发者
使用切片的三种方式|学习笔记
快速学习使用切片的三种方式。
177 0
使用切片的三种方式|学习笔记
go语言 切片知识补充 复制、截取、排序
go语言 切片知识补充 复制、截取、排序
|
Java 编译器 Scala
函数使用注意事项和细节3|学习笔记
快速学习函数使用注意事项和细节3。