[Day 29] -『 GO语言学习笔记』- 复合型别 - 切片(Slice) (I)

以下笔记摘录自『 The Go Workshop 』。

切片的核心其实还是阵列,切片只是在阵列外套上一层额外的包装,让我们能够建立有数字索引键的有序集合,也不必担心长度问题,并且,我们可以很简单的使用Golang的内建函式append()去新增元素,可以透过以下方法:

<新切片> = append(<切片>, <新元素>)

大部分的程序码很少使用阵列,应尽量使用切片取里所有的有序集合。

append()可以一次加入多个值到切片里,因为第二个值可以接收数量不定的值:

<新切片> = append(<切片>, <新元素1>, <新元素2>,..., <新元素N>)

我们也能在append()里面传入一个切片,在後面加上解包算符(unpack operator),也就是...

For example,

package main

import (
	"fmt"
	"os"
)

func getPassedArgs() []string {
	var args []string
	for i := 1; i < len(os.Args); i++ {
		args = append(args, os.Args[i])
	}
	return args
}

func getLocals(extraLocals []string) []string {
	var names []string
	names = append(names, "Leo", "Fanny")
	names = append(names, extraLocals...)
	return names
}

func main() {
	names := getLocals(getPassedArgs())
	fmt.Println("名字:", names)
}
//Command line
go run . Jannet

//Output
名字: [Leo Fanny Jannet]

从切片和阵列再建立新的切片

<新切片> = <阵列或切片>[<起始索引>:<结束索引(不含)>]

范围会从起始索引算起,一直到结束索引的前一个索引

注意!!当我们使用这种方法时,golang不会真的将资料复制到新的阵列。

For example,

package main

import "fmt"

func message() string {
	s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	m := fmt.Sprintln("元素:", s[2:7])
	return m
}

func main() {
	fmt.Print(message())
}


//Output
元素: [3 4 5 6 7]

<<:  Day28 :【TypeScript 学起来】React + TypeScript 实作简单 Todo App Part1

>>:  [Day28] HTB Optimum

Reader 的 MockK 测试

Reader 是我们 Android library 里面最外层的 API ,要测试它要先考虑它有跟...

Day29 - 重要观念: 死结与DB transaction

上一篇中整理了一些面试中常被问到的技术问题,其中我觉得两个比较重要的就属死结(deadlock)与D...

【Day 09】Text Message 应用

前一天我们讲到综合版可以接收所有种类的讯息。 @csrf_exempt def callback(r...

Day 26-制作购物车之设定Redux: reducers&store

主要呈现实作成果 以下内容有参考教学影片,底下有附网址。 (内容包括我的不专业解说分析及在实作过程中...

Day 11 - 丰收款非官方 PHP SDK 发布

因为要陪老婆追剧鱿鱼游戏,所以还有几个测试还没写完,但大致上这个 PHP SDK 的 API 已经开...