博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go:slice
阅读量:6860 次
发布时间:2019-06-26

本文共 1630 字,大约阅读时间需要 5 分钟。

一、切片创建方式

func main() {	// 创建切片方式1	// 让切片引用一个数组	array := [...]int{1, 2, 3, 4}	slice1 := array[1:3]	fmt.Println(slice1) // [2 3]	// 创建切片方式2	// 通过make方式创建切片	var slice2 []int // 这是切片定义,需要让其引用一个数组,或make一下才能使用!!!	slice2 = make([]int, 4)	fmt.Println(slice2) // [0 0 0 0]	var slice3 = make([]int, 4, 8) // 8为容量(cap),可选	fmt.Println(slice3) // [0 0 0 0]	slice4 := make([]string, 4)	fmt.Println(slice4) // [   ]	fmt.Println(cap(slice4)) // 4	// 创建切片方式3	// 定义一个切片,直接就指定具体数组,原理类似make方式	var slice5 = []float64{1.11, 2.22, 3.33}	slice6 := []string{"a", "b"}	fmt.Printf("%.1f\n", slice5) // [1.1 2.2 3.3]	fmt.Println(slice6) // [a b]}

方式1与方式2的区别:

  • 方式1是直接引用数组,这个数组是事先存在的,程序员是可操作的;
  • 方式2是通过make来创建切片,make会创建一个数组,而切片就是引用这个数组,这个数组是由切片在底层进行维护,程序员不可操作。

二、切片的添加操作

func main() {	slice := []string{"a", "b"}	fmt.Println(slice) // [a b]	slice = append(slice, "c", "d")	fmt.Println(slice) // [a b c d]	slice = append(slice, slice...)	fmt.Println(slice) // [a b c d a b c d]}

三、切片的拷贝操作

# 参数的数据类型都是切片copy(param1, param2)
func main() {	slice1 := []int{1, 2, 3}	slice2 := make([]int, 5)	slice3 := make([]int, 2)	copy(slice2, slice1)	fmt.Println(slice2) // [1 2 3 0 0]	copy(slice3, slice1)	fmt.Println(slice3) // [1 2]}

四、string与slice关系

string底层是一个byte数组,因此string也可以进行切片操作(这里不演示)。

string是不可变的,因此不能通过 str[0] = 'xx' 方式来修改字符串;如果需要修改字符串,可以先将 string 转成 []byte 或者 []rune 类型,修改后再转回。

func main() {	str := "Hello"	sli := []byte(str)	sli[0] = 'h'	fmt.Println(sli) // [104 101 108 108 111]	str = string(sli)	fmt.Println(str) // hello	// 推荐使用下面方式(支持中文)	s := []rune(str)	s[0] = '吖'	str = string(s)	fmt.Println(str) // 吖ello}

 

转载于:https://www.cnblogs.com/believepd/p/10928276.html

你可能感兴趣的文章
第一章 起步
查看>>
socket和http有什么区别?
查看>>
vue+element刷新当前路由
查看>>
关于“机器人离线编程”国内外近三年的研究
查看>>
计算机网络
查看>>
[04]javascript的数据类型
查看>>
[CC-SEABUB]Sereja and Bubble Sort
查看>>
JS设置cookie、读取cookie、删除cookie
查看>>
我的博客园的CSS和html设置
查看>>
数论基础(维诺格拉多夫著,裘光明译) 勘误
查看>>
vue-cookies的使用
查看>>
Code Signal_练习题_Make Array Consecutive2
查看>>
双向循环链表 初始化 插入 删除
查看>>
C#设计模式:职责链模式(Chain of Responsibility)
查看>>
Knockout.js随手记(2)
查看>>
条件注释判断IE浏览器
查看>>
Hibernate,删除对象时错误。
查看>>
C#中Cookies的读取
查看>>
冬季养生进补20招
查看>>
20179311《网络攻防实践》第四周作业
查看>>