Go基本数据结构的使用:string、slice、map

简介: Go基本数据结构的使用:string、slice、map

1.string(字符串)

     Go中的字符串是一个字节的切片。可以通过将其内容封装在“”中来创建字符串。Go中的字符串是Unicode兼容的,并且是UTF-8编码的。

1.1 基本使用

func StringTest() {
   str1 := "Hello"         //声明方式1
   str2 := string("World") //声明方式2
   fmt.Println(str1)
   fmt.Println(str2)
}
复制代码

运行:

网络异常,图片无法展示
|


1.2 strings包中操作string的函数

func StringTest() {
   str1 := "Hello"
   str2 := string("World")
   /**
   strings的常见函数
   */
   index := strings.Index(str1, "e")        //查找“e”在str1中的位置
   contains := strings.Compare(str1, str2)  //Compare返回一个按字典顺序比较两个字符串的整数。 如果a==b,则结果为0,如果a < b则为-1,如果a > b则为+1。
   fold := strings.EqualFold(str1, str2)    //类似于Java里的equals()
   contain := strings.Contains(str1, "llo") //查找“llo”是否在str1中
   fmt.Println(index)
   fmt.Println(contains)
   fmt.Println(fold)
   fmt.Println(contain)
}
复制代码

运行结果:

网络异常,图片无法展示
|


1.3 strconv包中与string相关函数

访问strconv包,可以实现string和其他数值类型之间的转换。

func StrconvTest() {
   /**
   参数1 数字的字符串形式
   参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制
   参数3 返回结果的bit大小 也就是int8 int16 int32 int64
   */
   parseInt, err := strconv.ParseInt("456", 16, 32)
   if err == nil {
      fmt.Println(parseInt)
   }
   /**
   参数1 数字的字符串形式
   (相当于调用了ParseInt(s, 10, 0))
   */
   atoi, err := strconv.Atoi("123")
   if err == nil {
      fmt.Println(atoi)
   }
   /**
   参数1 放入true或false
   */
   parseBool, err := strconv.ParseBool("false")
   if err == nil {
      fmt.Println(parseBool)
   }
}
复制代码

运行结果:

网络异常,图片无法展示
|


2.slice(切片)

    Go 语言切片是对数组的抽象。

Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。

切片是一种方便、灵活且强大的包装器。切片本身没有任何数据。它们只是对现有数组的引用。

切片与数组相比,不需要设定长度,在[]中不用设定值,相对来说比较自由

从概念上面来说slice像一个结构体,这个结构体包含了三个元素:

  1. 指针,指向数组中slice指定的开始位置
  2. 长度,即slice的长度
  3. 最大长度,也就是slice开始位置到数组的最后位置的长度

2.1 定义

//声明方式一
var ints1 []int
//声明方式二
ints2 := make([]int, 0)
复制代码

2.2 常见操作

func SliceTest() {
   //声明方式一
   var ints1 []int
   //声明方式二
   ints2 := make([]int, 0)
   //添加元素
   ints1 = append(ints1, 2, 2, 3, 4, 5, 8)
   ints2 = append(ints2, 9, 4, 2, 3, 5, 6)
   //根据下标查找元素
   i := ints1[2]
   fmt.Println(i)
   //遍历
   for i := 0; i < len(ints2); i++ {
      fmt.Print(ints2[i], "  ")
   }
   fmt.Println()
   //删除元素
   fmt.Println(ints1)
   ints1 = append(ints1[:1], ints1[2:]...)
   fmt.Println(ints1)
}
复制代码

运行结果:

网络异常,图片无法展示
|


2.3 常见函数

len() :获取长度

cap() :测量切片最长可以达到多少

append() :向slice里面追加一个或者多个元素,然后返回一个和slice一样类型的slice

copy():copy从源slice的src中复制元素到目标dst,并且返回复制的元素的个数

3.map(字典)

map是Go中的内置类型,它将一个值与一个键关联起来。可以使用相应的键检索值

3.1 定义

/* 声明变量,默认 map 是 nil */
var map_variable(Map名称) map[key_data_type(键类型)]value_data_type(值类型)
/* 使用 make 函数创建 */
map_variable = make(map[key_data_type]value_data_type)
rating := map[string]float32 {"C":5, "Go":4.5, "Python":4.5, "C++":2 }
//如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对
复制代码

3.2 常见操作

func MapTest() {
  var m1 map[string]string /*创建集合 */
  m1 = make(map[string]string)
  /* map插入key - value对,各个国家对应的首都 */
  m1["France"] = "巴黎"
  m1["Italy"] = "罗马"
  m1["Japan"] = "东京"
  m1["India "] = "新德里"
  /*使用键输出地图值 */
  for country := range m1 {
    fmt.Println(country, "首都是", m1[country])
  }
  /*查看元素在集合中是否存在 */
  capital, ok := m1["American"] /*如果确定是真实的,则存在,否则不存在 */
  fmt.Println(capital)
  fmt.Println(ok)
  if ok {
    fmt.Println("American 的首都是", capital)
  } else {
    fmt.Println("American 的首都不存在")
  }
}
复制代码

运行结果:

网络异常,图片无法展示
|


3.3 常见函数

delete(map, key) 函数:用于删除集合的元素, 参数为 map 和其对应的 key。删除函数不返回任何值

先到这里就ok啦,因为博主也是go语言初学者,高深的东西以后再分享吧!



相关文章
|
23天前
|
存储 Java
告别混乱!用Java Map优雅管理你的数据结构
【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
76 2
|
23天前
|
存储 Java 开发者
Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
54 2
|
1月前
|
存储 Go 容器
深入探究Go语言中的数据结构
深入探究Go语言中的数据结构
40 3
|
21天前
|
存储 Java 开发者
Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
26 1
|
2月前
|
存储 Java API
【数据结构】map&set详解
本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
36 6
【数据结构】map&set详解
|
1月前
|
存储 缓存 Java
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
33 1
|
1月前
|
存储 自然语言处理 安全
【数据结构】Map的使用与注意事项
【数据结构】Map的使用与注意事项
25 1
|
2月前
|
Go 定位技术 索引
Go 语言Map(集合) | 19
Go 语言Map(集合) | 19
|
3月前
|
存储 算法 Java
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
Go 通过 Map/Filter/ForEach 等流式 API 高效处理数据
|
3月前
|
人工智能 Go
go slice 扩容实现
go slice 扩容实现
52 3

热门文章

最新文章