Go语学习笔记 - Slice、Map | 从零开始Go语言

简介: Go语学习笔记 - Slice、Map | 从零开始Go语言

学习笔记,写到哪是哪。


1、Slice切片

Slice和java中的ArrayList类似,Go语言数组长度不可改变,Slice的长度不固定,可追加元素。


定义方式可以是:


var identifier []type

也可以使用make函数


var slice1 []type = make([]type, len)

样例代码如下


package main
import "fmt"
//切片
func test_slice() {
  a := [...]int{1, 2, 3}
  b := a[:]
  fmt.Printf("a:%T,b%T\na=%v,b=%v\n", a, b, a, b)
  c := a[:2]
  fmt.Println(c)
  s := make([]string, 0)
  s = append(s, "haha")
  s = append(s, "haha1", "haha2")
  fmt.Println(s, len(s), cap(s))
  printSlice := func(x []int) { fmt.Printf("len=%d,cap=%d,slice=%v\n", len(x), cap(x), x) }
  var d []int
  if d == nil {
  printSlice(d)
  }
  copyS := make([]string, cap(s)*2)
  copy(copyS, s)
  fmt.Println(copyS, s)
}
func main() {
  test_slice()

}

执行结果


a:[3]int,b[]int

a=[1 2 3],b=[1 2 3]

[1 2]                                  

[haha haha1 haha2] 3 3                  

len=0,cap=0,slice=[]                    

[haha haha1 haha2   ] [haha haha1 haha2]


注意


1、 可以看出a是数组,b是将a数组转为切片。


2、c是a数组的索引为0到2-1的元素,作为切片。


3、可以使用copy函数,进行切片元素拷贝。


4、使用len()、cap()内置函数,可以获取切片的长度以及最大容量。


5、使用append()函数可以对切片元素进行追加。


2、Map

和java中的map类似,在创建map的时候也需要明确键值类型。


定义方式:


var map_variable map[key_data_type]value_data_type

map_variable := make(map[key_data_type]value_data_type)

样例代码如下


package main
import "fmt"
func testMap() {
  var a = make(map[string]int)
  a["小黄"] = 10
  a["小红"] = 18
  for s, i := range a {
  fmt.Println(s, i)
  }
  b, ok := a["小兰"]
  fmt.Println(b, ok)
  a["小花"] = 21
  delete(a, "小黄")
  fmt.Println(a)
}
func main() {
  testMap()
}

执行结果


小黄 10

小红 18

0 false            

map[小红:18 小花:21]

注意


1、在获取map某个值的时候,会返回两个返回值,第二个返回值为bool类型,如果不存在该键值对,则为false。


2、可以使用delete()函数进行键值对删除。


小结

使用方式也是相对严谨的,都是在工作中比较常规的数据类型。


相关文章
|
11天前
|
Go
Go 语言为什么不支持并发读写 map?
Go 语言为什么不支持并发读写 map?
|
5天前
|
存储 安全 NoSQL
Go map 读写性能优化 - 分片 map
Go map 读写性能优化 - 分片 map
11 1
|
5天前
|
存储 人工智能 安全
go sync.Map 设计与实现
go sync.Map 设计与实现
10 1
|
12天前
|
算法 安全 Go
go 语言中 map 的相关知识
go 语言中 map 的相关知识
|
16天前
|
设计模式 安全 Java
Go - 使用 sync.Map 来解决 map 的并发操作问题
Go - 使用 sync.Map 来解决 map 的并发操作问题
9 1
|
5天前
|
存储 算法 Go
go map 设计与实现
go map 设计与实现
9 0
|
5天前
|
缓存 安全 测试技术
深入理解 go sync.Map - 基本原理
深入理解 go sync.Map - 基本原理
7 0
|
21天前
|
存储 Go 索引
GO 集合 map 使用总结
GO 集合 map 使用总结
22 0
|
1月前
|
安全 Go
Go语言map并发安全,互斥锁和读写锁谁更优?
Go并发编程中,`sync.Mutex`提供独占访问,适合读写操作均衡或写操作频繁的场景;`sync.RWMutex`允许多个读取者并行,适用于读多写少的情况。明智选择锁可提升程序性能和稳定性。示例展示了如何在操作map时使用这两种锁。
41 0
|
1月前
|
安全 Go 开发者
Go语言map并发安全使用的正确姿势
在Go并发编程中,由于普通map不是线程安全的,多goroutine访问可能导致数据竞态。为保证安全,可使用`sync.Mutex`封装map或使用从Go 1.9开始提供的`sync.Map`。前者通过加锁手动同步,后者内置并发控制,适用于多goroutine共享。选择哪种取决于具体场景和性能需求。
21 0