美文网首页
06. Go极简教程 slice的基础使用

06. Go极简教程 slice的基础使用

作者: 超级大柱子 | 来源:发表于2018-06-02 22:33 被阅读27次

数组的长度不可改变,切片长度是可变的, 相当于可变数组

package main

import (
    "log"
    "sort"
)

func main() {

    // 声明一个数组, 数组需要指定长度
    var arr = [10]string{}

    // 声明一个切片, 不需要指定长度
    var slice = []string{}

    log.Println(arr)   // [       ]
    log.Println(slice) // []

    // 使用make方法创建切片, 初始大小为0, 最大大小为10, 设定一个足够大的最大值, 会使得切片获得更高的性能
    var a = make([]string, 0, 10)

    // 给切片a添加一个对象
    a = append(a, "dog")

    // 给切片添加多个对象
    a = append(a, "cat", "fish", "bird", "menkey")

    // 合并两个切片, {}...是解构数组
    a = append(a, []string{"dog2", "cat2", "fish2", "bird2", "menkey2"}...)

    // 查看切片长度
    log.Println(len(a))

    // 查看切片的最大长度
    log.Println(cap(a))

    // 截取切片
    a = a[1:6] // 保留a[1], a[2], [3], a[4], a[5]

    // 切片删除 a[2], a...是解构数组
    a = append(a[:2], a[2+1:]...)

    // 切片插入元素 a[2] = "newA2"
    var temp = append(a[:2], "newA2")
    a = append(temp, a[2+1:]...)

    // 切片升序排序
    a = append(a, "apple")
    sort.Strings(a)
    log.Println(a) //[apple cat dog2 fish newA2]

    // 切片降序排序
    sort.Sort(sort.Reverse(sort.StringSlice(a)))
    log.Println(a) //[apple cat dog2 fish newA2]

    // 切片的拷贝
    tempCopy := make([]string, len(a))
    copy(tempCopy, a)

    // 切片的遍历
    for i, v := range a {
        log.Println(i, v)
    }

    // 切片的去重
    a1 := []string{"dog", "cat", "dog", "dog", "fish", "fish"}
    a2 := []string{}
    for _, v1 := range a1 {
        canAdd := true
        for _, v2 := range a2 {
            if v1 == v2 {
                canAdd = false
            }
        }
        if canAdd {
            a2 = append(a2, v1)
        }
    }
    log.Println("去重:", a2) //去重: [dog cat fish]

    // 切片交集
    b_one := []string{"dog", "cat", "dog", "dog", "fish", "fish"}
    b_two := []string{"monkey", "fish", "dog"}
    b2 := []string{}
    for _, v1 := range b_one {
        canAdd := false
        for _, v2 := range b_two {
            if v1 == v2 {
                canAdd = true
            }
        }
        if canAdd {
            b2 = append(b2, v1)
        }
    }
    log.Println("交集:", b2) //交集: [dog cat fish]

    // 切片指针
    // 切如果动态修改了大小, go会创建一个新的切片, 地址就变化了, 如果要获得一直获得内存地址, 可以使用切片指针
    var b []string
    var p = &b

    *p = append(*p, "dog")
    log.Println(*p)
    *p = append(*p, "cat")
    log.Println(*p)
}

参考资料:
http://go-tour-zh.appspot.com/
http://www.jb51.net/article/127812.htm

Go极简教程 继续阅读( 目录)

相关文章

  • 06. Go极简教程 slice的基础使用

    数组的长度不可改变,切片长度是可变的, 相当于可变数组 参考资料:http://go-tour-zh.appspo...

  • 01 Go极简教程 目录

    极简教程的初衷是给已有其他语言基础的人阅读尽可能少的内容学习Go语言 Go极简教程 目录 Go极简教程 环境安装及...

  • 07. Go极简教程 map的基础使用

    map的声明 map的操作 参考资料:http://go-tour-zh.appspot.com/ Go极简教程 ...

  • Go基础——Slice

    声明Slice 带有 T 类型元素的切片由 []T 表示,其中T代表slice中元素的类型。切片在内部可由一个结构...

  • ClickHouse SQL 语法基础极简教程 + bitmap

    ClickHouse SQL 语法基础极简教程 + bitmap 位图数据类型的使用实例 查看所有数据库 创建数据...

  • golang slice结构

    使用例子 内存结构 slice在goalng中的结构定义, 在源码src/runtime/slice.go中 一下...

  • 11. Go极简教程 error的使用

    习惯使用error类型, 并且做好判断, 能很大程度上提高程序的健壮性 养成习惯, 不然等运行时错误不好捕获 参考...

  • 深入浅出Golang的协程池设计

    教程制作: IT无崖子(刘丹冰) 教程简介:本教程主要针对具有一定编程基础的学员,懂得基本的编程语法。 使用Go语...

  • Go语言——Slice分析

    Go语言——Slice分析 源码很不好找,在go\src\runtime\slice.go。 根据容量cap*元素...

  • Go slice那些事

    今晚闲来无事,总结一下Go的slice slice是什么slice在Go中的原型?slice类似数组,是一种定长的...

网友评论

      本文标题:06. Go极简教程 slice的基础使用

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