Skip to content

Latest commit

 

History

History
executable file
·
63 lines (56 loc) · 2.08 KB

File metadata and controls

executable file
·
63 lines (56 loc) · 2.08 KB

数组与切片

新建一个数组的方法

    aList [5]int
    bList = []int{1, 2}
    cList = []int{1: 1, 4: 2}
    dList = new([]int)

新建一个切片的方法

    slice := make([]int, 10)
    var slice []int = make([]int, 10)
    // 以下两种方式的效果是一样的
    slice := new([100]int)[0:50]
    slice := make([]int, 50, 100)

make 函数的定义如下:

func make([]type, len, cap)
// len 为初始化时占用长度, cap 为可选参数容量

new 函数和 make 函数的区别:

主要功能都是在堆上面分配内存给需要的结构体。

  • new 函数为每个新的类型 T 分配一片内存,初始化为 0 并且返回 *T 的内存地址,这种申请方式会返回一个 T 类型初始值为 0 的指针。
  • make 函数返回一个类型为 T 的初始值,它只适用于创建 slice, map 和 channel。

bytes 包

更省资源的字符串添加方法

var buffer bytes.Buffer
for {
    if s, ok := getNextString(); ok { //method getNextString() not shown here
        buffer.WriteString(s)
    } else {
        break
    }
}
fmt.Print(buffer.String(), "\n")

修改字符串的某个字符

Go 中的字符串是不能被改变的,如果需要修改,需要先将 string 转换成 字节数组。

s := "hello"
c := []byte(s)
c[0] = 'c'
s2 := string(c) // s2 == "cello"

append 函数的常见操作

  • 将切片 b 的元素追加到切片 a 之后:a = append(a, b...)
  • 删除位于索引 i 的元素:a = append(a[:i], a[i+1:]...)
  • 切除切片 a 中从索引 i 至 j 位置的元素:a = append(a[:i], a[j:]...)
  • 为切片 a 扩展 j 个元素长度:a = append(a, make([]T, j)...)
  • 在索引 i 的位置插入元素 x:a = append(a[:i], append([]T{x}, a[i:]...)...)
  • 在索引 i 的位置插入长度为 j 的新切片:a = append(a[:i], append(make([]T, j), a[i:]...)...)
  • 在索引 i 的位置插入切片 b 的所有元素:a = append(a[:i], append(b, a[i:]...)...)
  • 取出位于切片 a 最末尾的元素 x:x, a = a[len(a)-1], a[:len(a)-1]
  • 将元素 x 追加到切片 a:a = append(a, x)