写给前端工程师的Golang入门教程 —— 内置类型

209 阅读3分钟

JavaScript是一门弱类型的语言,对于数据类型定义比较宽泛,Golang是一门强类型的语言,对于的类型定义比较细致。

基本类型

类型长度说明
bool1对应JavaScript的Boolean
string对应JavaScript的String
(u)int4/832或64位
(u)int81-128 ~ 127, 0 ~ 255
(u)int162-32768 ~ 32767, 0 ~ 65535
(u)int324-2147483648 ~ 2147483647, 0 ~ 4294967295
(u)int648-9223372036854775808 ~ 9223372036854775807, 0 ~ 18446744073709551615
uintptr4/8存储指针的uint32或uint64整数
byte1uint8的别名
rune4int32的别名, Unicode码点
float324符合IEEE-754标准的32位浮点数
float648符合IEEE-754标准的64位浮点数
complex648具有float32实部和虚部的所有复数的集合
complex12816具有float64实部和虚部的所有复数的集合

数组

JavaScript的数组声明不用关注元素类型和数组长度

let a = [1, 2, 3]

Golang要求声明元素类型和数组长度

var a = [3]int{1, 2, 3}

Golang数组长度是声明在类型前面的,并且也可以让编译器计算

var a = [...]int{1, 2, 3}

切片

Golang的数组声明需要事先定义数组长度,看起来不像JavaScript中的数组那么好用,实际上与JavaScript中的数组对等的应该是Golang的切片。

数组是值类型,切片是在数组上面的一个‘View’,它指向一个数组的一段连续的内存。

初始化一个切片也很简单,直接去掉数组长度的声明就是切片

var a = []int{1, 2, 3}

在切片元素不确定的情况下,我们还可以使用make初始化一个切片

var a = make([]int, 3)
var b = make([]int, 3, 6)

初始化一个长度为3的切片a;初始化一个长度为3,数组的容量为6的b。

Golang提供了一些方法操作切片

len()可以查看切片的长度 cap()可以查看切片指向的数组的长度

相当于JavaScript中的Array.prototype.length属性

append()可以追加元素到切片中,并且有扩容指向的数组的能力

相当于JavaScript中的push()

还可以使用[low:high]切片操作

相当于JavaScript中的Array.prototype.slice()方法

Map

Map是一种无序的Key-Value数据结构,相当于JavaScript中的Map

初始化Map需要声明类型

var a = map[string]string
var b = map[string]string {
  "foo": "Hello",
  "bar": "World"
}

也可以使用make

var a = make(map[string]string)

使用delete()删除key

结构体

结构体可以看作是JavaScript中的Object,不过需要事先定义字段。

type Person struct {
  name string
  age int
}

var a = Person{name: "allen", age: 30}
var b = Person{"allen", 30}
var c = new(Person)
c.name = "allen"
c.age = 30

new()Golang的一个内置函数,它会根据传入的类型分配一片内存空间并返回指向这片内存空间的指针。

欢迎关注我的公众号“野生程序员的修炼”,原创技术文章第一时间推送。