当前位置: 首页 > 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] = "小王"
}

相关文章:

  • 代码mark:脚本获取包含全角字符的字符串的长度
  • Grafana-新增用户
  • 【AI】如何自己训练AI大模型
  • 20250506| 物化视图学习
  • 【Python】--实现多进程
  • FastComposer论文问题与解决
  • 信息论06:信息增益——量化不确定性的艺术与科学
  • STM32H743单片机实现ADC+DMA多通道检测
  • 匿名函数对编译错误的影响
  • day17 天池新闻数据KMeans、DBSCAN 与层次聚类的对比
  • SpringSecurity配合Thymeleaf实现详解,以及实战用例
  • 【计网】ipconfig、ping、arp、tracert
  • mysql中select 1 from的作用
  • 嵌入式MCU语音识别算法及实现方案
  • 自动生成 te.extern 接口:TVM 中第三方库的智能化接入方案
  • 达梦DM数据库安装步骤
  • GuassDB如何创建兼容MySQL语法的数据库
  • linux 如何防止内存碎片化?
  • 企业CMS中的内容中台是什么?
  • 【JS逆向基础】WEB基础
  • 中科院院士魏辅文已卸任江西农业大学校长
  • 诺和诺德一季度减重版司美格鲁肽收入增83%,美国市场竞争激烈下调全年业绩预期
  • 最新研究:基因编辑治疗晚期胃肠道癌显成效
  • 山东莒县农商银行去年收入、利润下降,资本充足率等指标增长
  • 安赛乐米塔尔深化在华战略布局,VAMA总经理:做中国汽车板竞争力前三
  • 《中国医药指南》就“宫颈癌等论文出现男性病例”致歉:辞退涉事编辑