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

一、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] = "小王"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值