马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
一、string、数组、切片代码
- package main
- import "fmt"
- // 定义结构体
- type student struct {
- id int
- name string
- age int
- score float32
- }
- func main() {
- // 使用var声明切片
- var slice1 []int
- slice1 = append(slice1, 1)
- slice1 = append(slice1, 2)
- slice1 = append(slice1, 3)
- fmt.Println("打印切片 = ", slice1)
- // 使用make关键字初始化,下面的意思为长度为5,容量为10
- slice2 := make([]int, 5, 10)
- slice2[0] = 1
- fmt.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] = 20
- fmt.Println("slice3 = ", slice3)
- fmt.Println("newSlice = ", newSlice)
- // 如果对新创建的切片进行append操作,如果没有发生扩容会向原数组中插入数据,如果发生扩容,新切片会创建一个新的数组,这条同样适用与原始切片
- newSlice = append(newSlice, 5)
- fmt.Println("添加元素后newSlice = ", newSlice)
- newSlice[0] = 10
- fmt.Println("添加元素后修改newSlice = ", newSlice)
- fmt.Println("添加元素后newSlice的 slice3 = ", slice3)
- // 使用var声明数组
- var intList1 [5]int
- intList1 = [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 student
- s1.score = 1
- s1.age = 18
- s1.name = "小明"
- // 短声明
- s2 := student{
- id: 1,
- name: "小贵",
- age: 30,
- score: 100,
- }
- // 使用&获取结构体指针
- p := &s2
- fmt.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"
- // 将字符串转化为字节数组给nameCopy
- nameCopy := []byte(name)
- // 修改第二个字符
- nameCopy[1] = 'l'
- fmt.Printf("nameCopy = [%s]\n", string(nameCopy))
- // 定义空字符串
- var school string
- fmt.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] = 100
- fmt.Println("修改后的数组 = ", arr)
- }
复制代码 二、map代码
- package main
- import (
- "fmt"
- )
- func main() {
- // map的声明
- names := map[int]string{
- 1: "小明",
- 2: "小李",
- 3: "小刘",
- }
- names[4] = "小蓝"
- // 更新之后,原map也被修改,说明是引用传递
- updateNames(names)
- ages := make(map[int]int)
- ages[1] = 10
- ages[2] = 34
- ages[3] = 18
- fmt.Println(names)
- // map删除某个key
- delete(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] = "小王"
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |