美文网首页
go - 基本类型

go - 基本类型

作者: n_xy | 来源:发表于2021-04-10 22:07 被阅读0次

slice

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

slice由以上三部分组成,每个占8字节,所以一个slice占24字节。
至于每个的含义很明显不在赘述。len()和cap()函数可以查看相应的字段.

创建,初始化,访问

创建方式有两种

  1. make

make([]int,3,5)

make()比new()函数多一些操作,new()函数只会进行内存分配并做默认的赋0初始化,而make()可以先为底层数组分配好内存,然后从这个底层数组中再额外生成一个slice并初始化。另外,make只能构建slice、map和channel这3种结构的数据对象,因为它们都指向底层数据结构,都需要先为底层数据结构分配好内存并初始化。

make返回的是引用,而new返回的是指针.

  1. 赋值创建

color_slice := []string{"red","blue","black","green"}
//这种分配方式会时之后的字面量从100开始
color_slice := []string{99:"abc"}

关于初始化
TODO

访问
slice底层是数组,所以访问实际上是对数组的访问.slice能被访问的范围只能是lenth之内的.尝试读取或者写入会报错.

    b:=make([]int,3,5)
    b[0]=1
    b[1]=2
    b[2]=3
        //err
    fmt.Println(b[4])
    fmt.Println(len(b))
nil silce和空slice

当声明一个slice没有初始化时,

var nil_slice []int

它的内部结构是这样的

ptr len cap
nil 0 0

当创建一个空slice

empty_slice := make([]int,0)
empty_slice := []int{}
ptr len cap
addr 0 0
切片赋值的一些操作

对于切片赋值,共享数组,slice变化这些不在赘述。
看下边一个

    b:=make([]int,5,10)
    b[0]=1
    b[1]=2
    b[2]=3
    b[3]=4
    c := b[1:3:6]

最后一条c是一个len=2,cap=6-1=5的切片。
像之上的赋值,第三个数不能超出原slice的cap,第二个数不能超过len.

append()

TODO

slice当做参数传给

Go中函数的参数是按值传递的。
虽然slice实际上包含了3个属性,它的数据结构类似于[3/5]0xc42003df10.当向函数中传递一个slice时,传入一个副本,所以传递给函数的副本仍然指向源slice的底层数组。
如果函数内部对slice进行了修改,有可能会直接影响函数外部的底层数组,从而影响其它slice。但并不总是如此,例如函数内部对slice进行扩容,扩容时生成了一个新的底层数组,函数后续的代码只对新的底层数组操作,这样就不会影响原始的底层数组。

相关文章

  • go学习笔记(二)——基本数据类型

    数据类型 1.基本类型 go语言中的基本类型如上图所示,go语言中有五类基数类型。 1) boolean型 同其他...

  • go - 基本类型

    slice slice由以上三部分组成,每个占8字节,所以一个slice占24字节。至于每个的含义很明显不在赘述。...

  • Go语言的类型系统概览

    本文将介绍go语言中的各种类型和go类型系统中的各种概念。 不知道这些概念,将很难理解go语言。 概念:基本类型 ...

  • go入门(一)

    本文以语法定义等为主。说一下go中基本的语法糖。 基本类型 go中的基本类型主要有: 数值型:分为整数,小数,复数...

  • Go语言标准库之JSON编解码

    Go语言标准库之JSON编解码 基本的类型 Go语言中的数据类型和JSON的数据类型的关系 bool -> JSO...

  • Go语言标准库之JSON编解码

    Go语言标准库之JSON编解码 基本的类型 Go语言中的数据类型和JSON的数据类型的关系 bool -> JSO...

  • 类型 & 变量

    go实现 类型 原生基本类型 int, float , string, [2]int... 原生的高级类型 []i...

  • 0.Go语言·基本数据类型

    基本数据类型 main.go DAY01 main.go DAY02 main.go DAY03 main.go ...

  • Go基本数据类型_003

    Go基本数据类型 Go语言中有丰富的数据类型,除了基本的整型、浮点型、布尔型、字符串外,还有数组、切片、结构体、函...

  • Go核心语言编程 - 基本数据类型(2)

    Go是一种强类型的静态编译语言Go语言内置了七类基本数据类型• 布尔类型:bool • 整型:byte int i...

网友评论

      本文标题:go - 基本类型

      本文链接:https://www.haomeiwen.com/subject/xeyvkltx.html