Go语言第3天 - 常用数据类型

以下内容部分参考自
Go语言基础数据类型
Go语言中的数组切片:特立独行的可变数组
Go语言数据类型-数组
Go标准容器之List

1. 整形


其中比较特殊的是rune和uintptr。

rune 类型是 Unicode 字符类型,和 int32 类型等价,通常用于表示一个 Unicode 码点。rune 和 int32 可以互换使用。
uintptr 是一种无符号的整数类型,没有指定具体的bit大小但是足以容纳指针。 uintptr类型只有在底层编程是才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。

2. 浮点型

Go语言提供了两种精度的浮点数,float32和float64。两者就是范围的不同,具体选择看具体需求。

3. 复数

这种数据类型在其他语言中是比较少见的,Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。

var z = x + yi //构建复数
x = real(z) //取出实部
y = imag(z) //取出虚部

4. 布尔型

常用的true、false类型。

5. 字符串

Go语言中的字符串比js、c#中的字符串少了一些封装。
比如下标访问直接访问的是字节,获取长度也是字节的长度。想要按字符进行下标访问,需要先用rune执行切片操作。

var s = "123你好";
println(len(s)); //9
println(len([]rune(s))); //5
println(string(([]rune(s))[:4])); //123你

标准库中有四个包对字符串处理尤为重要:bytes、strings、strconv和unicode包。对字符串的常用操作都可以通过这四个包进一步封装。

6. 常量

如常数e和pi,此处不表。

7. Array

//声明
var arr1 [5]int
var arr2 = [5]int{1, 2, 3, 4, 5}   //指定长度为5,并赋5个初始值
var arr3 = [5]int{1, 2, 3}         //指定长度为5,对前3个元素进行赋值,其他元素为零值
var arr4 = [5]int{4: 1}            //指定长度为5,对第5个元素赋值
var arr5 = [...]int{1, 2, 3, 4, 5} //不指定长度,对数组赋以5个值
var arr6 = [...]int{8: 1}          //不指定长度,对第9个元素(下标为8)赋值1
//[0 0 0 0 0][1 2 3 4 5] [1 2 3 0 0] [0 0 0 0 1] [1 2 3 4 5] [0 0 0 0 0 0 0 0 1]
fmt.Print(arr1,arr2,arr3,arr4,arr5,arr6);

//获取数组长度
fmt.Print(len(arr1)); //5

//通过下标访问元素
fmt.Print(arr5[2]);  //3

//通过range访问元素
for i, v := range arr {
    //range具有两个返回值,第一个返回值i是元素的数组下标,第二个返回值v是元素的值。
    fmt.Println(i, v)
}

数组是Go语言编程中最常用的数据结构之一。
与部分语言不同的是,Go语言中的数组是值类型的,不是引用类型的。所以调用函数传进一个数组参数,函数内部修改数组参数不会影响外部数组的值。

8.Slice

slice是对底层数组的抽象和控制,使用slice可以动态控制数组的增长和收缩。

//slice声明,3个参数,分别为类型、长度、容量
var arr1 = make([]int,3,5);

//slice声明,不定长度,与数组相似,但是[]中间不需要指定长度
var arr2 = []int{1, 2, 3, 4, 5};

//数组动态增加元素
arr2 = append(arr2,6); 
fmt.Print(arr2); //[1 2 3 4 5 6]

类型、长度和Array一样理解,容量指给数组变动预留的内存大小,提前给你划好内存区域,如果扩展长度不用重新申请内存。
append操作会每次考察你的容量是否足够,如果不够会重新申请内存,所有设置合理的容量,可以避免反复申请内存,提高性能。

这里我并没有提到删除元素的方法,因为从slice这种数据结构来看,本身并不适合做删除操作。抛开语言,只谈数据结构,我们知道数组删除是会移动元素的,效率会比较低。当然任何语言的数组实现(顺序存储),删除元素都避免不了移动元素。
所以,如果会频繁删除中间或开头的元素,更好的是选择链表这样的数据结构,如map或container/list包。

如果一定要执行删除操作的话,可以这么写:

var arr = []int{1, 2, 3, 4, 5};
var deleteIndex = 2; //待删除的元素下标
var newArr = append(arr[:deleteIndex],arr[deleteIndex+1:]...);
fmt.Print(newArr); //[1 2 4 5]

9.Map

Go语言中的映射类型,相当于哈希表。

var temp1 = make(map[string]int); //初始化
temp1["dog"] = 233; //添加值
println(temp1["dog"]) //233

var value,isExist = temp1["cat"]; //value-值,isExist-是否存在这个key
println(value); //0
println(isExist); //false

var temp2 = map[string]int{"one":1,"two":2}; //初始化
println(len(temp2)); //2
delete(temp2,"two"); //删除值
println(len(temp2)); //1

10.List

使用起来非常方便、简单的动态数组。

var list = list2.New();
list.PushBack(1);
list.PushBack(2);
list.PushFront(3);
list.PushFront(4);
list.Remove(list.Front());
list.InsertBefore(5,list.Front());

//遍历数组,输出:5312
for e := list.Front(); e != nil; e = e.Next() {
    fmt.Print(e.Value)
}

11.待补充...

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • 出处---Go编程语言 欢迎来到 Go 编程语言指南。本指南涵盖了该语言的大部分重要特性 Go 语言的交互式简介,...
    Tuberose阅读 18,398评论 1 46
  • 1.安装 https://studygolang.com/dl 2.使用vscode编辑器安装go插件 3.go语...
    go含羞草阅读 1,538评论 0 6
  • 官方网站:https://golang.org/标准库文档:https://golang.org/pkg/在线编码...
    技术学习阅读 2,323评论 2 39
  • 成长对于我们来说,虽然害怕,但我们仍然要坚持我们可以做到的。余生那么长,就让我们成为更好的自己吧。 时光流逝,任何...
    TWO女王阅读 485评论 0 1
  • 大家好我是王智海轩,就在前几天我参加了一个开发潜能的活动我和咱们班的两个同学参加工加的,第一天下午我们吃了晚饭就始...
    王智海轩阅读 58评论 0 1