持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情
一、String 与 Slice
string底层是一个byte数组,因此string也可以进行切片处理。
package main
import "fmt"
func main() {
// string 底层是一个 byte 数组,因此 string 也可以进行切片处理。
str := "hello@atguigu"
// 使用切片来获取到atguigu
slice := str[6:]
fmt.Println("slice = ", slice)
}
- string 和切片在内存的形式,以 “abcd”画出内存示意图。
- string 是不可变的,也就是说不能通过
str[0] = ‘z’方式来修改字符串【演示】 - 如果需要修改字符串,可以先将
string --> [] byte或者[] rune ---> 修改 ---> 重写转成 string【演示 + 说明】
package main
import "fmt"
func main() {
// string 底层是一个 byte 数组,因此 string 也可以进行切片处理。
str := "hello@atguigu"
// 使用切片来获取到atguigu
slice := str[6:]
fmt.Println("slice = ", slice)
arr1 := []byte(str)
arr1[0] = 'z'
str = string(arr1)
fmt.Println("str = ", str)
// 细节,我们转成[]byte后,可以处理英文和数字,但是不能处理中文
// 原因是 []byte 字节来处理,而一个函数,是三个字节,因此就会出现乱码
arr2 := []rune(str)
arr2[0] = '北'
str = string(arr2)
fmt.Println("str = ", str)
}
- 细节,我们转成[]byte后,可以处理英文和数字,但是不能处理中文
- 原因是 []byte 字节来处理,而一个函数,是三个字节,因此就会出现乱码
二、切片的课堂练习题:
说明:编写一个函数 fbn(n int),要求完成。
- 可以接受一个 n int
- 能够将斐波那契数列放到切片中
- 提示,斐波那契数列形式:
思路:
- 声明一个函数 fbn(n int)([]uint64)
- 编写fbn(n int),进行 for 循环来存放斐波那契数列 0 ---> 1 , 1 ---> 1
package main
import "fmt"
func fbn(n int) []uint64 {
// 声明一个切片,切片大小 n
fbnSlice := make([]uint64, n)
// 第一个数和第二个数的斐波那契为 1
fbnSlice[0] = 1
fbnSlice[1] = 1
for i := 2; i < n; i++ {
fbnSlice[i] = fbnSlice[i-1] + fbnSlice[i-2]
}
return fbnSlice
}
func main() {
// 思路:
// 1. 声明一个函数 fbn(n int)([]uint64)
// 2. 编写fbn(n int),进行 for 循环来存放斐波那契数列 0 ---> 1 , 1 ---> 1
// 测试一把
fbnSlice := fbn(20)
fmt.Println("fbnSlice = ", fbnSlice)
}