码迷,mamicode.com
首页 > 编程语言 > 详细

Go语言【数据结构】切片

时间:2019-09-15 12:50:46      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:不能   成员   初始   ice   语言   内存   代码   data   用法   

切片

简介

  简单地说,切片就是一种简化版的动态数组。Go 数组的长度不可改变,而切片长度是不固定,切片的长度自然也就不能是类型的组成部分了。数组虽然有适用它们的地方,但是数组的类型和操作都不够灵活,因此在Go代码中数组使用的并不多。而切片则使用得相当广泛,理解切片的原理和用法是一个Go程序员的必备技能。
 

初始化

package main

import "fmt"

func main() {
	// 第一种方式 对比数组不指定size大小
	var slice1 = [] int{1,2,3,4}
	// 第二种方式
	slice2 := [] int{1,2,3,4}
	// 第三种方式 make生成空切片
	var slice3 []int = make([]int,3,5)
	// 第四种方式 简写 len=3 cap=5
	slice4 := make([]int,3,5)

	fmt.Println(slice1)
	fmt.Println(slice2)
	fmt.Println(slice3)
	fmt.Println(slice4)
}

//[1 2 3 4]
//[1 2 3 4]
//[0 0 0]
//[0 0 0]

 

数据结构

我们先看看切片的结构定义,reflect.SliceHeader

type SliceHeader struct {
    Data uintptr
    Len  int
    Cap  int
}

可以看出切片的开头部分和Go字符串是一样的,但是切片多了一个Cap成员表示切片指向的内存空间的最大容量(对应元素的个数,而不是字节数)。下图是x := []int{2,3,5,7,11}y := x[1:3]两个切片对应的内存结构。

 

Go语言【数据结构】切片

标签:不能   成员   初始   ice   语言   内存   代码   data   用法   

原文地址:https://www.cnblogs.com/lianzhilei/p/11521771.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!