【第三十四篇】Go String 与 Slice

95 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

一、String 与 Slice

  1. string 底层是一个 byte 数组,因此 string 也可以进行切片处理。
package main

import "fmt"

func main() {
	// string 底层是一个 byte 数组,因此 string 也可以进行切片处理。
	str := "hello@atguigu"

	// 使用切片来获取到atguigu
	slice := str[6:]
	fmt.Println("slice = ", slice)
}

  1. string 和切片在内存的形式,以 “abcd”画出内存示意图。

  1. string 是不可变的,也就是说不能通过 str[0] = ‘z’方式来修改字符串【演示】
  2. 如果需要修改字符串,可以先将 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)
}
  1. 细节,我们转成[]byte后,可以处理英文和数字,但是不能处理中文
  2. 原因是 []byte 字节来处理,而一个函数,是三个字节,因此就会出现乱码

二、切片的课堂练习题:

说明:编写一个函数 fbn(n int),要求完成。

  1. 可以接受一个 n int
  2. 能够将斐波那契数列放到切片中
  3. 提示,斐波那契数列形式:

思路:

  1. 声明一个函数 fbn(n int)([]uint64)
  2. 编写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)

}