Go随笔——Go复合数据类型

wujunqi1996 · · 357 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1.goto跳转

package main


import "fmt"


func main() {

total := 0

index := 0

max := 100


START:

index += 1

total += index

if index == max {

goto END

}

goro START

END:

fmt.Println("total")

}


2.数组类型

1)声明

数组声明需要指定组成元素的类型以及存储元素的数量(长度)。在数组声明后。其长度不可修改,数组的每个元素会根据对应类型的零值进行初始化。


var names [10]string

var scores [10]int

初始化元素

names = []string{"1","2","3"} 


空切片,已经初始化但是元素数量为0

names = []string{} 


赋值数组

names = []string{1: "05", 100: "abc"}


2)字面量

a)指定数组长度:[length]type{v1,v2,v3}

例 var user [3]string = [3]string{"kk","ee","rr"}


b)使用初始化元素数量推到数组长度[...]type{v1,v2,v3}

例 bounds := [...]int{10, 20, 30, 40}


c)对指定位置元素进行初始化[length]type{a:1, b:2, c:3}

例 names = []string{1: "05", 100: "abc"}


2)操作

a)关系运算 ==, !=

fmt.Println(bounds == [...]int{10, 20, 30})

fmt.Println(bounds != [...]int{10, 20, 30})


b)获取数组长度

使用len函数可获取数组长度

fmt.Println(len(bounds))


c)访问&修改

通过编号对数组元素进行访问和修改

fmt.Println(bounds[0], bounds[len(abc) - 1])


bounds[0] = "abc"


d)切片获取数组的一部分元素作为切片

fmt.Printf("%T, %q\n",lang[1:3], lang[1,3])


e)遍历

可以通过for+len+访问方式或for-range方式对数组中元素进行遍历

for i := 0; i < len(langs); i++ {

fmt.Printf("%d:%q\n", i, langs[i])


for i, v := range langs {

fmt.Printf("%d: %q\n",i, v)

}


使用for-range遍历数组,range返回的两个元素分别为数组元素索引和值


3.映射(map)

映射是存储一系列无序的key/value对,通过key来对value进行操作(增删改查)映射的key只能为可使用==运算符的类型,value可以为任意类型


1)声明

map声明需要指定组成元素key,value的类型,在声明后,会被初始化为nil,表示暂不存在的映射

var tels map[string]string

var points map[[2]int]float64

fmt.Printf("%T, %t, %v\n", tels, tels == nil, tels)


2)初始化

使用字面量初始化

tels = map[string]string{"kk":"11111", "ll":"gggg"}

fmt.Printf("%q\n", tels)


使用make函数进行初始化

weight := make(map[string]float64)

fmt.Println(weight)


3)操作

a)获取元素的数量

使用len函数获取映射元素的数量

fmt.Println(len(tels))


b)访问

sudents := map[int]string{1: "kk", 2: "rr"}

students01 := map[int]map[string]string{1: map[string]string{"name": "kk"}}

fmt.Printf("%v, %q, %q\n", students, students[1], students[2])


当访问key存在映射时则返回对应的值,否则返回值类型的零值


c)判断key是否存在

通过key访问元素可接受两个值,第一个值为value,第二个值为bool类型标识元素是否存在,存在为true,不存在为false


student, ok := student[1]

fmt.Printf("%t, %v\n", ok, student)


d)修改&增加

使用key对映射负值时当key存在则修改key对应value,若key不存在则增加key和value

students[1] = "kl" //key存在,修改

students[3] = "pp" //key不存在,增加


e)删除

使用delete函数删除映射中已经存在的key

delete(students, 1)

delete(students, 4)

fmt.Println(students)


f)遍历

使用for-range对映射中各个元素进行遍历,range返回两个元素分别为映射的key和value

for k, v := range students {

fmt.Printf("%v:%v\n", k, v)

}



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:wujunqi1996

查看原文:Go随笔——Go复合数据类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

357 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传