go的基础数据类型

基础的数据类型:

布尔类型:bool
整型:int8、uint8(byte)、int16、int(平台相关)、uint(平台相关)、uintptr(同指针,32位平台为4字节,64位平台为8字节)
浮点类型:float32、float64
复数类型:complex64、complex128
字符串:string
字符类型:rune
错误类型:error

复合类型:

指针(pointer)
数组(array)
切片(slice)
字典(map)
通道(chan)
结构体(struct)
接口(interface)
Go 语言在声明变量时,自动对变量对应的内存区域进行初始化操作。每个变量会初始化其类型的默认值,例如:
整型和浮点型变量的默认值为 0。
字符串变量的默认值为空字符串。
布尔型变量默认为 bool。
切片、函数、指针变量的默认为 nil。

一、布尔类型

var v1 bool
v1 = true

布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换。

二、字符类型

var str string
str = "Hello world"

三、数组类型

声明变量及初始化第一种:

var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"

声明变量及初始化第二种:

var a [5] int = [5]int{1,2,3,4,5}
var a = [5]int{1,2,3,4,5}
var a = [5]int{1,2,3}
var a = [...]int{1,2,3,4,5}
var a = [5]string{1:'abc',4:'efg'}

四、切片

切片借助数组的创建:

var a [5]int
var b []int = a[0:1]
var b []int= []int{1,2,3,4,5}

直接创建:

a := make([]int,5)//初始元素个数为5的数组切片,元素初始值为0
a := make([]int,5,10)//初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间

len(a):数组切片中当前存储的元素个数。
cap(a):返回的是数组切片分配的内存空间。

切片没有删除功能。

向切片数组中追加值:

第一种:

a := make([]int,5)//初始元素个数为5的数组切片,元素初始值为0
a = append(a, 1,2,3)

第二种:

a := []int{1,2,3}
b = append(b,a...)

 切片的拷贝:

slice1 := []int{1,2,3,4,5}
slice2 := []int{3,4,5}
copy(slice2,slice1) //只会复制slice1的前3个元素到slice2中
copy(slice1,slice2) //只会复制slice2的前3个元素到slice1中的前3个位置

切片的排序:

sort.Strings(slice1)
sort.Ints(slice1)

五、map

map的创建和初始化第一种:

var a map[string]string = map[string]string{"hello":"world"}

map的创建和初始化第二种:

a := make(map[string]string, 10)
a["hello"] = "world"

相关操作:

val, ok:= a["hello"]     //查找
for k, v := range a {  //遍历
    fmt.Println(k,v)
}

delete(a, "hello")     //删除
len(a)                //长度

sync.Map有以下特性:

  • 无须初始化,直接声明即可。
  • sync.Map 不能使用 map 的方式进行取值和设置等操作,而是使用 sync.Map 的方法进行调用。Store 表示存储,Load 表示获取,Delete 表示删除。
  • 使用 Range 配合一个回调函数进行遍历操作,通过回调函数返回内部遍历出来的值。Range 参数中的回调函数的返回值功能是:需要继续迭代遍历时,返回 true;终止迭代遍历时,返回 false。
var scene sync.Map
// 将键值对保存到sync.Map
scene.Store("greece", 97)
scene.Store("london", 100)
scene.Store("egypt", 200)
// 从sync.Map中根据键取值
fmt.Println(scene.Load("london"))
// 根据键删除对应的键值对
scene.Delete("london")
// 遍历所有sync.Map中的键值对
scene.Range(func(k, v interface{}) bool {
    fmt.Println("iterate:", k, v)
    return true
})

六、 列表 list

 Go 语言中,将列表使用 container/list 包来实现,内部的实现原理是双链表。列表能够高效地进行任意位置的元素插入和删除操作。

列表与切片和 map 不同的是,列表并没有具体元素类型的限制。

列表的初始化一:

lis := list.New()

列表的初始化二:

var lis list.List

列表的相关操作:

双链表支持从队列前方或后方插入元素,分别对应的方法是 PushFront 和 PushBack。

提示

这两个方法都会返回一个 *list.Element 结构。如果在以后的使用中需要删除插入的元素,则只能通过 *list.Element 配合 Remove() 方法进行删除,这种方法可以让删除更加效率化,也是双链表特性之一。

lis := list.New()
// 尾部添加
lis.PushBack("canon")
// 头部添加
lis.PushFront(67)
// 尾部添加后保存元素句柄
element := lis.PushBack("fist")
// 在fist之后添加high
lis.InsertAfter("high", element)
// 在fist之前添加noon
lis.InsertBefore("noon", element)
// 删除
lis.Remove(element)
原文地址:https://www.cnblogs.com/domestique/p/9977210.html