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

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

一、string、数组、切片代码

package mainimport "fmt"// 定义结构体
type student struct {id    intname  stringage   intscore float32
}func main() {// 使用var声明切片var slice1 []intslice1 = append(slice1, 1)slice1 = append(slice1, 2)slice1 = append(slice1, 3)fmt.Println("打印切片 = ", slice1)// 使用make关键字初始化,下面的意思为长度为5,容量为10slice2 := make([]int, 5, 10)slice2[0] = 1fmt.Println("打印make切片 = ", slice2)// 打印长度和其容量fmt.Printf("切片的长度 = %d,切片的容量 = %d\n", len(slice2), cap(slice2))// 切片化:语法u[low:high]创建对已存在数组进行操作的切片slice3 := []int{1, 2, 3, 4}fmt.Println("slice3 = ", slice3, len(slice3), cap(slice3))newSlice := slice3[1:]fmt.Println("newSlice = ", newSlice, len(newSlice), cap(newSlice))// 新创建的切片与最初的切片指向的底层其实是同一个数组,只是他们的指针的位置不一样,我们如果修改数组某个值,他们全都会修改newSlice[0] = 20fmt.Println("slice3 = ", slice3)fmt.Println("newSlice = ", newSlice)// 如果对新创建的切片进行append操作,如果没有发生扩容会向原数组中插入数据,如果发生扩容,新切片会创建一个新的数组,这条同样适用与原始切片newSlice = append(newSlice, 5)fmt.Println("添加元素后newSlice = ", newSlice)newSlice[0] = 10fmt.Println("添加元素后修改newSlice = ", newSlice)fmt.Println("添加元素后newSlice的 slice3 = ", slice3)// 使用var声明数组var intList1 [5]intintList1 = [5]int{1, 2, 3, 4, 5}fmt.Println("intList1 = ", intList1)// 短声明intList2 := [5]int{3, 4, 5, 6, 7}fmt.Println("intList2 = ", intList2)// 证明:在go语言中,数组是值传递的,修改传入的数组,发现原数组不变updateArray(intList2)fmt.Println("修改后的原数组 = ", intList2)// 声明结构体变量var s1 students1.score = 1s1.age = 18s1.name = "小明"// 短声明s2 := student{id:    1,name:  "小贵",age:   30,score: 100,}// 使用&获取结构体指针p := &s2fmt.Println("s2.name", s2.name)fmt.Println("p.name", p.name)// 使用s2修改属性s2.name = "小新"fmt.Println("s2.name", s2.name)fmt.Println("p.name", p.name)// 使用p修改属性p.name = "小p"fmt.Println("s2.name", s2.name)fmt.Println("p.name", p.name)// 定义一个字符串name := "lucky"// 将字符串转化为字节数组给nameCopynameCopy := []byte(name)// 修改第二个字符nameCopy[1] = 'l'fmt.Printf("nameCopy = [%s]\n", string(nameCopy))// 定义空字符串var school stringfmt.Println("school = ", school)// 字符串支持 + 运算newName := name + " " + "day"fmt.Println("newName = ", newName)// 字符串支持 += 运算newName += "s"fmt.Println("newName = ", newName)if name != newName {fmt.Println("ok")}// 使用`初始化字符串text := `ABCD
EFG`fmt.Println("text = ", text)
}func updateArray(arr [5]int) {arr[0] = 100fmt.Println("修改后的数组 = ", arr)
}

二、map代码

package mainimport ("fmt"
)func main() {// map的声明names := map[int]string{1: "小明",2: "小李",3: "小刘",}names[4] = "小蓝"// 更新之后,原map也被修改,说明是引用传递updateNames(names)ages := make(map[int]int)ages[1] = 10ages[2] = 34ages[3] = 18fmt.Println(names)// map删除某个keydelete(names, 4)fmt.Println(names)// 遍历map,每次打印结果不一样,表示是无序的for k, v := range names {fmt.Println(k, v)}// map与数组一样,也存在扩容的问题,为了防止频繁扩容,最好给一个初始值initMap := make(map[int]int, 10)fmt.Println(len(initMap))
}func updateNames(names map[int]string) {names[1] = "小王"
}
http://www.xdnf.cn/news/313399.html

相关文章:

  • 今年我国已发生三级以上地震318次
  • 从创业踩雷到依法解债:湖北理元理律师事务所的危机拆解逻辑
  • 继电器负载知识
  • 小刚说C语言刷题—1044 -找出最经济型的包装箱型号
  • win11 怎样把D盘空间分给C盘一点
  • day18-API(常见API,对象克隆)
  • 将nginx设置成自启动,防止每次开机后都要自己手动启动
  • nginx服务--基础
  • C语言数组和函数的实践———扫雷游戏
  • 调用DeepSeek的API
  • 文献综述怎么写?高效阅读、智能整理,告别文献焦虑!
  • 感知器准则感知器神经元模型——等价
  • 电动双向金属硬密封蝶阀:四大领域流体控制的终极解决方案 -耀圣
  • Vue 项目中使用 EJS 模板动态注入环境变量
  • Vue3.5 企业级管理系统实战(十七):角色管理
  • String、StringBuilder、StringBuffer的区别
  • 0506--01-DA
  • TDengine 车联网案例
  • 2025.5.6总结
  • python setup.py install --user和pip install -e .的区别
  • HHsuite3 的 HHblits 和 HHsearch比较
  • android设备运行bcc程序报错
  • 5.6刷题并查集
  • Python-map从基础到进阶
  • SpringBoot Starter简介-笔记
  • https://juejin.cn/editor/drafts/7262346366541070395
  • RNN 与 CNN:深度学习中的两大经典模型技术解析
  • [HOT 100] 2646. 最小化旅行的价格总和
  • C语言| 递归实现斐波那契数列
  • 基站综合测试仪核心功能详解:从射频参数到5G协议测试实战指南