zoukankan      html  css  js  c++  java
  • go 学习之切片

    切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用传递的机制

    切片的长度是可以变化的,因此切片是一个可以动态变化数组

    切片的内存空间存放三块内容,第一块是数组的地址,第二块是数组的长度,第三块是数组的容量

    切片可以继续切片

    append动态添加内容到切片,返回新创建的切片(底层数组也重新创建),如果是将一个切片追加到另一个切片 newSlice = append(slice, slice...)

    遍历的两种方式:for,for-range

    copy(a, b)完成切片复制操作,相互独立,互不影响 。长度不够时不会报错(len(a)<len(b)),只拷贝len(a)个元素

    创建切片的三种方式:

    1、定义一个切片,然后让切片去应用一个已创建好的数组

            arr := [5]int{1, 3, 5, 7, 9}
            slice := arr[1:3]
            fmt.Println(slice)

    2、通过make来创建切片

            slice := make([]int, 5, 8)
            slice = []int{1, 3, 5, 7}
            fmt.Println(slice)
    

    3、简写创建方式:

            slice := []int{1, 3, 5, 7}
            fmt.Println(slice)
    

    slice 与string:

    a、string底层是byte数组,因此string也可以进行切片处理

    b、string是不可变的,也就是说不能通过str[0] = 'a'方式来修改字符串

    c、如果要修改字符串,可以先将string -> []byte 或者string -> []rune 修改重写成string

     通过切片方式修改字符串内容

            str := "hello world"
            str1 := []byte(str)
            str1[0] = 'H'
            str2 := string(str1)
            fmt.Println(str2)
            str := "hello world"
            str1 := []rune(str)
            str1[0] = '我'
            str2 := string(str1)
            fmt.Println(str2)
    

      

      总结:

      通过make方式创建切片可以指定切片的大小和容量

        如果没有给切片的各个元素赋值,那么就会使用默认值(0,“”, false)

      通过make方式创建切片对应的数组是由make底层维护,对外不可见,即只能通过slice去访问各个元素 

    方式1和方式2的区别:

    方式1是直接引用数组,这个数组是事先存在的,程序员是可见的

    方式2是通过make来创建切片,make也会创建一个数组,是由切片在底层维护,程序员是看不见的

  • 相关阅读:
    在FreeBSD中pkg包管理器使用实例
    租了一台华为云耀云服务器,却直接被封公网ip,而且是官方的bug导致!
    Java8 Stream对集合的一些应用
    idea 编码UTF-8 设置
    Java RSA非对称加密算法实现
    分库分表 策略 临时
    springboot+dubbo + zookeeper 案例
    跟着华为,学数字化转型(6):一把手工程
    跟着华为,学数字化转型(5):数据保护和业务决策
    跟着华为,学数字化转型(4):数据采集
  • 原文地址:https://www.cnblogs.com/Caoxt/p/14143983.html
Copyright © 2011-2022 走看看