Go语言——string、数组、切片以及map

打印 上一主题 下一主题

主题 1932|帖子 1932|积分 5796

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、string、数组、切片代码

  1. package main
  2. import "fmt"
  3. // 定义结构体
  4. type student struct {
  5.         id    int
  6.         name  string
  7.         age   int
  8.         score float32
  9. }
  10. func main() {
  11.         // 使用var声明切片
  12.         var slice1 []int
  13.         slice1 = append(slice1, 1)
  14.         slice1 = append(slice1, 2)
  15.         slice1 = append(slice1, 3)
  16.         fmt.Println("打印切片 = ", slice1)
  17.         // 使用make关键字初始化,下面的意思为长度为5,容量为10
  18.         slice2 := make([]int, 5, 10)
  19.         slice2[0] = 1
  20.         fmt.Println("打印make切片 = ", slice2)
  21.         // 打印长度和其容量
  22.         fmt.Printf("切片的长度 = %d,切片的容量 = %d\n", len(slice2), cap(slice2))
  23.         // 切片化:语法u[low:high]创建对已存在数组进行操作的切片
  24.         slice3 := []int{1, 2, 3, 4}
  25.         fmt.Println("slice3 = ", slice3, len(slice3), cap(slice3))
  26.         newSlice := slice3[1:]
  27.         fmt.Println("newSlice = ", newSlice, len(newSlice), cap(newSlice))
  28.         // 新创建的切片与最初的切片指向的底层其实是同一个数组,只是他们的指针的位置不一样,我们如果修改数组某个值,他们全都会修改
  29.         newSlice[0] = 20
  30.         fmt.Println("slice3 = ", slice3)
  31.         fmt.Println("newSlice = ", newSlice)
  32.         // 如果对新创建的切片进行append操作,如果没有发生扩容会向原数组中插入数据,如果发生扩容,新切片会创建一个新的数组,这条同样适用与原始切片
  33.         newSlice = append(newSlice, 5)
  34.         fmt.Println("添加元素后newSlice = ", newSlice)
  35.         newSlice[0] = 10
  36.         fmt.Println("添加元素后修改newSlice = ", newSlice)
  37.         fmt.Println("添加元素后newSlice的 slice3 = ", slice3)
  38.         // 使用var声明数组
  39.         var intList1 [5]int
  40.         intList1 = [5]int{1, 2, 3, 4, 5}
  41.         fmt.Println("intList1 = ", intList1)
  42.         // 短声明
  43.         intList2 := [5]int{3, 4, 5, 6, 7}
  44.         fmt.Println("intList2 = ", intList2)
  45.         // 证明:在go语言中,数组是值传递的,修改传入的数组,发现原数组不变
  46.         updateArray(intList2)
  47.         fmt.Println("修改后的原数组 = ", intList2)
  48.         // 声明结构体变量
  49.         var s1 student
  50.         s1.score = 1
  51.         s1.age = 18
  52.         s1.name = "小明"
  53.         // 短声明
  54.         s2 := student{
  55.                 id:    1,
  56.                 name:  "小贵",
  57.                 age:   30,
  58.                 score: 100,
  59.         }
  60.         // 使用&获取结构体指针
  61.         p := &s2
  62.         fmt.Println("s2.name", s2.name)
  63.         fmt.Println("p.name", p.name)
  64.         // 使用s2修改属性
  65.         s2.name = "小新"
  66.         fmt.Println("s2.name", s2.name)
  67.         fmt.Println("p.name", p.name)
  68.         // 使用p修改属性
  69.         p.name = "小p"
  70.         fmt.Println("s2.name", s2.name)
  71.         fmt.Println("p.name", p.name)
  72.         // 定义一个字符串
  73.         name := "lucky"
  74.         // 将字符串转化为字节数组给nameCopy
  75.         nameCopy := []byte(name)
  76.         // 修改第二个字符
  77.         nameCopy[1] = 'l'
  78.         fmt.Printf("nameCopy = [%s]\n", string(nameCopy))
  79.         // 定义空字符串
  80.         var school string
  81.         fmt.Println("school = ", school)
  82.         // 字符串支持 + 运算
  83.         newName := name + " " + "day"
  84.         fmt.Println("newName = ", newName)
  85.         // 字符串支持 += 运算
  86.         newName += "s"
  87.         fmt.Println("newName = ", newName)
  88.         if name != newName {
  89.                 fmt.Println("ok")
  90.         }
  91.         // 使用`初始化字符串
  92.         text := `ABCD
  93. EFG`
  94.         fmt.Println("text = ", text)
  95. }
  96. func updateArray(arr [5]int) {
  97.         arr[0] = 100
  98.         fmt.Println("修改后的数组 = ", arr)
  99. }
复制代码
二、map代码

  1. package main
  2. import (
  3.         "fmt"
  4. )
  5. func main() {
  6.         // map的声明
  7.         names := map[int]string{
  8.                 1: "小明",
  9.                 2: "小李",
  10.                 3: "小刘",
  11.         }
  12.         names[4] = "小蓝"
  13.         // 更新之后,原map也被修改,说明是引用传递
  14.         updateNames(names)
  15.         ages := make(map[int]int)
  16.         ages[1] = 10
  17.         ages[2] = 34
  18.         ages[3] = 18
  19.         fmt.Println(names)
  20.         // map删除某个key
  21.         delete(names, 4)
  22.         fmt.Println(names)
  23.         // 遍历map,每次打印结果不一样,表示是无序的
  24.         for k, v := range names {
  25.                 fmt.Println(k, v)
  26.         }
  27.         // map与数组一样,也存在扩容的问题,为了防止频繁扩容,最好给一个初始值
  28.         initMap := make(map[int]int, 10)
  29.         fmt.Println(len(initMap))
  30. }
  31. func updateNames(names map[int]string) {
  32.         names[1] = "小王"
  33. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表