[13th][Day13] slice

在 go 的世界中,没有 array 这个 keyword ,只有 slice 跟 map
map 有 key / value 的概念

先来说说 slice

之前我们遇到的变数皆为独特的、单一的,当想要操作多个类似结构的资料时,在 computer science 中,可以用集合来操作多个同一类型的结构,也可以透过 loop 来处理重复性的工作。

可以把 slice 想像成一排药盒,每个格子中储存一个资料。slice 的限制在於『只能储存同一种类型』的资料,而且建立後长度不能改变。

宣告一个长度为 4 ,属性为 string 的 slice

func main() {
	var langs [4]string

	langs[0] = "Go"
	langs[1] = "GoWorker"
	langs[2] = "GoHttp"
	langs[3] = "GoServer"
    
    fmt.Println(langs)
}

slice 的 index 是从 0 开始,而非从 1 开始

或者 ... 可以用语法糖的方式同时宣告&赋值

func main() {
	langs := [4]string{
		"Go",
		"GoWorker",
		"GoHttp",
		"GoServer",
	}
    fmt.Println(langs)
}

遍历 for range
Go 的 for 回圈可以使用 for range 扫过所有元素。

func main() {
    langs := [4]string{
        "Go",
		"GoWorker",
		"GoHttp",
		"GoServer",
    }
 
    for k, v := range langs {
        fmt.Println(fmt.Sprintf("%d: %s", k, v))
    }
}

如果不需要 index ,可以使用底线 _ 代替:

    for _, v := range langs {
        fmt.Println(e)
    }

使用 for k,v := range 时,直接修改 v 的值是没有效果的

    for _, e := range arr {
        e = e * e
    }
 
     // nothing happened
    for _, e := range arr {
        fmt.Println(e)
    }

把『要修改得值』 塞到指定的位置 才能做到改动


    arr := [5]int{1, 2, 3, 4, 5}
 
    for i := 0; i < len(arr); i++ {
        arr[i] = arr[i] * arr[i]
    }
 
    for _, e := range arr {
        fmt.Println(e)
    }

<<:  鬼故事 - CS 高手

>>:  Day08 SwiftUI 01 - Life Cycle : UIKit App Delegate

Day 05: Anaconda虚拟环境建置 Conda

在撰写Python专案时,时常会遇到需要不同Python版本以及不同版本的Package的问题。建立...

从国家标准技术研究院(NIST)的角度来看,满足最低安全要求的控制基准的最佳来源-准则(Guidelines)

NIST SP 800-53 R4是一个指南,在附录D 安全控制基线–摘要中提供了安全控制基线。它还...

C#学习笔记4:C#的基本运算

这是我一边学习一边写下的笔记,如果内容有错,恳请在下方留言跟我说,我会非常感谢的!!! 基本运算 一...

Rust-特徵(Trait)(一)

什麽是特徵 根据官网的解释就是 特徵会告诉编译器特定型别与其他型别共享的功能。可以使用特徵定义来抽象...

LineBot - 图文选单

昨天已经把 LineBot 设定好了,今天要做一些简单的指令,包含一图文选单,做完之後大概如下图: ...