Day3 # 资料型别

昨天已经能够透过 Go 印出 Hello World 了,今天要来认识资料型别,
如果都准备妥妥的,那我们就开始吧 ─=≡Σ(((っ゚∀゚)っ

资料型别

由於 Go 在宣告变数或是函式前,会有加上型别的需求,因此了解有哪些常用的型别非常重要。

基本型别

字串 string : "Hello""Amazing"
布林值 bool : TrueFalse
整数 int : 12328825252
浮点数 float64 : 0.314100.002

字串及数字的型别还能再分得更多更细,但在接下来的学习过程可能不会使用到,就先跳过不提。

集合型别

array 与 slice

array 和 slice 在资料的结构上基本上是相同的,但是 array 需要在 [] 指定值的数量,因此长度会是固定的。

// [n]type {data}
// n 阵列元素数量、type 阵列元素类型、data 值

[]int
[5]int {1, 2, 3, 4, 5}

初次碰到 array 竟然会指定长度这件事吓了好大一跳,想说资料不可能每次都固定长度啊,我不想学了...(开玩笑的)

但其实 slice 才更像平常常用的阵列形式,slice 不需要指定长度,使用上更具弹性及实用性。而两者相同的部分在於阵列内的资料的属性必须相同,因此字串只能是字串,数字就只能是数字。

关於更详细的 slice 使用方式,後续会再花篇幅解释(・ω・)b

// slice

[]string {"Hello", "It's", "Amazing!"}
[]int {5, 2, 0}

map

map 是以 key: value 为组合的集合,可以透过 key 找到对应的 value。
特别需要注意的是 key 的资料型别必须一致,value 的资料型别也必须一致。

// [] 内放 key 的资料型态,外面放 value 的资料型态
map[string]string{} // => 得到一个空 map

// {} 内的值必须符合定义的型别
map[string]string{"name": "Ba", "age": "18"}

函式

函式在程序语言的输入输出中扮演了很重要的角色,Go 的 package 也是依赖函式在做输出,就来看看函式是如何宣告及应用吧:

// 最基本的起手式
func plus(){
    // to do...
}

// 如果想要有输入参数,则需要规定传入的型态
func plus(a int, b int) {
    fmt.Println(a + b)
}

// 如果有 return 值,也要帮他加上型态
func plus(a int, b int) int {
    return a + b
}

Pointer 指标

指标是用来指向值所存放记忆体位置,并非值本身。因此可以透过记忆体位置,取得在那个记忆体位置的值。

*T 为 type 的指标

var p *int

& 会指向该变数的记忆体位置,如果有透过指标更改变数的值的话,原本在记忆体位置内的值就会被更动。

i := 10
p = &i

fmt.Println(*p) // => 10
*p = 21
fmt.Println(i) // => 21

Struct

可以作为自定义型别来使用。

type Cat struct {
    Name string
    Age  int
}

fat := Cat{"BuiBui", 5}

结论

这次没讲到的 goroutine 以及 channel 可以说是 Go 相当大的特色,由於还没好好了解,待後续篇章再来好好了解及解释。

今天先到这边,有任何建议及问题都欢迎与我讨论 :)


<<:  Day-03 说明在 Ruby 里常数 (constant) 跟变数 (variable) 的差别是什麽?

>>:  Day.5 深入理解连结之符号解析

Day-28 手把手的手写辨识模型 0x3:CNN is the end?模型大哉问

快到结尾了,再让笔者水一篇 XDD,今天我们来聊聊 CNN 会不会是深度学习领域的最後呢? CNN...

Mikrotik RouterOS从入门到实战系列-Mikrotik入门第四课

Mikrotik RouterOS从入门到实战系列-Mikrotik入门第四课 VPN详解与实战应用...

xlsx档与json档转换

这篇接续上一篇,将电影名称爬取後转为json档,今天就要再转为xlsx档,使资料以表格方式呈现。废话...

Day-7 Pipeline

Pipeline tags: IT铁人 Clock Cycle Time Clock Cycle T...

Day 26 Quantum Protocols and Quantum Algorithms

Quantum Counting Quantum search + Quantum phase es...