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

go数据结构笔记

 常用数据结构

切片

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

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

package main

import "fmt"

func main() {
	var numbers = make([]int, 3, 10) //切片类型为int 长度为3 容量为10

	printSlice(numbers)
}

func printSlice(x []int) {
	fmt.Printf("len=%d cap=%d slice=%v\n", len(x), cap(x), x)
}

看下打印的数据

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

package main

import "fmt"

func main() {
	var numbers []int

	printSlice(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 main

import "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 main

import "fmt"

func main() {
   var numbers []int
   printSlice(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 main

import (
	"fmt"
)

func main() {
	//第一种声明
	var test1 map[string]string
	//在使用map前,需要先make,make的作用就是给map分配数据空间
	test1 = make(map[string]string, 10) //key 和value均 string
	test1["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

相关文章:

  • Spring(5)——IoC DI
  • DevExpress WinForms 中 SwiftPlot 图表控件的使用指南
  • DeepSeek:技术教育领域的AI变革者——从理论到实践的全面解析
  • 修改 Macbook 终端窗口的显示信息
  • 【算法】用“龟兔赛跑”的思想原地移除元素
  • Go Context包详解与最佳实践
  • Vue学习笔记集--六大指令
  • f-string高级字符串格式化与string Template()
  • NestJS(基于 Express 的现代化框架)
  • coze ai assistant Task 3
  • 主流区块链
  • 人工智能在现代科技中的应用和未来发展趋势。
  • 每日Attention学习27——Patch-based Graph Reasoning
  • 来自腾讯的:《详解DeepSeek:模型训练、优化及数据处理的技术精髓》
  • 3.16学习总结
  • C#开发笔记:INI文件操作
  • 三、重学C++—CPP基础
  • Tsfresh + TA-Lib + LightGBM :A 股市场量化投资策略实战入门
  • Suno的对手Luno:AI音乐开发「上传参考音频 - 方式二:通过URL的方式」 —— 「Luno Api系列|AI音乐API」第12篇
  • 程序地址空间:深度解析其结构,原理与在计算机系统中的应用价值
  • 陈颖已任上海黄浦区委常委、统战部部长
  • 杨轶群任莆田市荔城区人民政府副区长
  • 江苏银行一季度净赚近98亿增逾8%,不良贷款率微降
  • 国家税务总局:“二套转首套”可以享受贷款利息个税专项扣除
  • 劳动最光荣!2426人受到表彰
  • 人民日报读者点题:规范涉企执法,怎样防止问题反弹、提振企业信心?