string 和 slice
- string底层是一个byte类型,可以进行切片
package main
import "fmt"
func main(){
var str string
str = "hello@atguigu"
slice := str[6:]
fmt.Println(slice)
}
//输出:atguigu
-
string和切片在内存的形式
-
string是不可变的,不能通过str[0]='t’能修改字符串
-
若需要修改字符串,可先将string转换成[]byte或者[]rune,再修改,最后重写转换成string
package main
import "fmt"
func main(){
var str string
str = "hello@atguigu"
//把"hello@atguigu"改成"zello@atguigu"
arr1 := []byte(str)
arr1[0] = 'z'
str = string(arr1)
fmt.Println("str=", str)
}
//转换成[]byte后,可以处理英文和数字,但是不能处理中文
//原因是:[]byte 按字节处理,而一个汉字是3个字节
//解决方法:将 string 转成[]rune即可,因为[]rune是按字符处理,兼容汉字
package main
import "fmt"
func main(){
var str string
str = "hello@atguigu"
//把"hello@atguigu"改成"zello@atguigu"
arr1 := []rune(str)
arr1[0] = '花'
str = string(arr1)
fmt.Println("str=", str)
}
//输出:str= 花ello@atguigu
切片练习
- 编写一个函数fbn(n int),要求完成
- 可以接收一个 n int
- 能够将斐波那契的数列放到切片中
- 提示:斐波那契的数列形式: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 {
fbnslice := make([]uint64, n)
fbnslice[0] = 0
fbnslice[1] = 1
for i := 2; i < n; i++ {
fbnslice[i] = fbnslice[i-2] + fbnslice[i-1]
}
return fbnslice
}
func main() {
/* 思路:
1.声明一个函数 fbn(n int) ([]uint64){}
2.编程fbn(n int)进行for循环来存放斐波那契的数列
*/
fbnSlice := fbn(10)
fmt.Println(fbnSlice)
}
//输出:[0 1 1 2 3 5 8 13 21 34]