当前位置: 首页 > news >正文

go数据结构笔记

 常用数据结构

切片

定义int类型,大小为3 长度为10

切片的数据结构可以类比成ArrayList,具备动态扩容的数组

package mainimport "fmt"func main() {var numbers = make([]int, 3, 10) //切片类型为int 长度为3 容量为10printSlice(numbers)
}func printSlice(x []int) {fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

看下打印的数据

切片初始化不指定大小和容量

package mainimport "fmt"func main() {var numbers []intprintSlice(numbers)if numbers == nil {fmt.Println("切片是空的")}
}func printSlice(x []int) {fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

打印

切片的截取

可以类比成String的subString

package mainimport "fmt"func main() {/* 创建切片 */numbers := []int{0,1,2,3,4,5,6,7,8}printSlice(numbers)/* 打印原始切片 */fmt.Println("numbers ==", numbers)/* 打印子切片从索引1(包含) 到索引4(不包含)*/fmt.Println("numbers[1:4] ==", numbers[1:4])/* 默认下限为 0*/fmt.Println("numbers[:3] ==", numbers[:3])/* 默认上限为 len(s)*/fmt.Println("numbers[4:] ==", numbers[4:])numbers1 := make([]int,0,5)printSlice(numbers1)/* 打印子切片从索引  0(包含) 到索引 2(不包含) */number2 := numbers[:2]printSlice(number2)/* 打印子切片从索引 2(包含) 到索引 5(不包含) */number3 := numbers[2:5]printSlice(number3)}func printSlice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

打印

切片的append() 和 copy() 函数

package mainimport "fmt"func main() {var numbers []intprintSlice(numbers)/* 允许追加空切片 */numbers = append(numbers)printSlice(numbers)/* 向切片添加一个元素 */numbers = append(numbers, 1)printSlice(numbers)/* 同时添加多个元素 */numbers = append(numbers, 2,3,4)printSlice(numbers)/* 创建切片 numbers1 是之前切片的两倍容量*/numbers1 := make([]int, len(numbers), (cap(numbers))*2)/* 拷贝 numbers 的内容到 numbers1 */copy(numbers1,numbers)printSlice(numbers1)
}func printSlice(x []int){fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

打印

map

这里可以类比成Java的Hashmap,同样不是线程安全的

package mainimport ("fmt"
)func main() {//第一种声明var test1 map[string]string//在使用map前,需要先make,make的作用就是给map分配数据空间test1 = make(map[string]string, 10) //key 和value均 stringtest1["one"] = "js"test1["two"] = "golang"test1["three"] = "java"fmt.Println(test1) //map[two:golang three:java one:js]//第二种声明test2 := make(map[string]string)test2["one"] = "js"test2["two"] = "golang"test2["three"] = "java"fmt.Println(test2) //map[one:js two:golang three:java]//第三种声明test3 := map[string]string{"one":   "js","two":   "golang","three": "java",}fmt.Println(test3) //map[one:js two:golang three:java]language := make(map[string]map[string]string)language["js"] = make(map[string]string, 2)language["js"]["id"] = "1"language["js"]["desc"] = "js是世界上最美的语言"language["golang"] = make(map[string]string, 2)language["golang"]["id"] = "2"language["golang"]["desc"] = "golang抗并发非常good"fmt.Println(language) //map[js:map[id:1 desc:js是世界上最美的语言] golang:map[id:2 desc:golang抗并发非常good]]//增删改查val, key := language["js"] //查找是否有js这个子元素if key {fmt.Println("%v", val)} else {fmt.Println("no")}language["js"]["id"] = "3"        //修改了js子元素的id值language["js"]["nickname"] = "测试" //增加js元素里的nickname值fmt.Println(language)delete(language, "js") //删除了js子元素fmt.Println(language)
}

打印

 参考

8小时转职Golang工程师(如果你想低成本学习Go语言)_哔哩哔哩_bilibili


http://www.mrgr.cn/news/94614.html

相关文章:

  • Netty基础—6.Netty实现RPC服务一
  • 【AI News | 20250316】每日AI进展
  • 新手村:数据预处理-异常值检测方法
  • 加固脱壳技术:DEX动态加载对抗
  • JS基础部分
  • 1.8PageTable
  • 个人居家 Web移动端 局域网 远程控制电脑 工具 PC遥控器拿去玩吧
  • 特殊 IP 地址
  • [GHCTF 2025]GetShell
  • c语言整理
  • OSPF-2 邻接建立关系
  • Mybatis批量操作
  • 数据库的基本知识
  • LeetCode 热题 100_前 K 个高频元素(75_347_中等_C++)(堆)(哈希表+排序;哈希表+优先队列(小根堆))
  • @RequestParam、@RequestBody、@PathVariable
  • 虚幻基础:蓝图常用节点
  • 总结 HTTP 协议的基本格式, 相关知识以及抓包工具fiddler的使用
  • 【bug日记】 编译错误
  • 自由学习记录(44)
  • C++相关基础概念之入门讲解(上)