Go string和slice 的应用

string和slice

  • string 底层是一个 byte 数组,因此 string 也可以进行切片处理
  • 案例演示:
//string底层是一个byte数组,因此string也可以进行切片处理
str := "hello@atguigu"
//使用切片获取到 atguigu
slice := str[6:] 
fmt.Println("slice=", slice)


  • string 和切片在内存的形式,以 "abcd" 画出内存示意图


  • string 是不可变的,也就说不能通过 str[0] = 'z' 方式来修改字符串
-- string是不可变的,也就说不能通过 str[0] = 'z' 方式来修改字符串
str[0] = 'z' [编译不会通过,报错,原因是string是不可变]

  • 如果需要修改字符串,可以先将 string -> []byte / 或者 []rune -> 修改 -> 重写转成 string
//"hello@atguigu" =>改成 "zello@atguigu"
str := "hello@atguigu"
arr1 := []byte(str) 
arr1[0] = 'z'
str = string(arr1)
fmt.Println("str=", str)

  • 细节,我们转成[]byte后,可以处理英文和数字,但是不能处理中文
  • 原因是 []byte 字节来处理 ,而一个汉字,是3个字节,因此就会出现乱码
  • 解决方法是 将  string 转成 []rune 即可, 因为 []rune是按字符处理,兼容汉字
arr1 := []rune(str) 
arr1[0] = '北'
str = string(arr1)
fmt.Println("str=", str)


  • 切片练习案例
编写一个函数 fbn(n int) ,要求完成
1)可以接收一个 n int
2)能够将斐波那契的数列放到切片中
3)提示, 斐波那契的数列形式:
arr[0] = 1; arr[1] = 1; arr[2]=2; arr[3] = 3; arr[4]=5; arr[5]=8
package main
import (
	"fmt"
)

func fbn(n int) ([]uint64) {
	//声明一个切片,切片大小 n
	fbnSlice := make([]uint64, n)
	//第一个数和第二个数的斐波那契 为1
	fbnSlice[0] = 1
	fbnSlice[1] = 1
	//进行for循环来存放斐波那契的数列
	for i := 2; i < n; i++ {
		fbnSlice[i] = fbnSlice[i - 1] + fbnSlice[i - 2]
	}
	return fbnSlice
}

func main() {
	//测试
	fnbSlice := fbn(20)
	fmt.Println("fnbSlice=", fnbSlice)
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值