Go string 和 []byte 的区别
Go string 和 []byte 的区别
如果需要频繁地修改字符串内容,或者处理二进制数据,使用 []byte 更为合适。如果字符串内容基本保持不变,并且主要处理文本数据,那么使用 string 更为方便。
- 不可变性
string 是不可变的数据类型,一旦创建就不能被修改。任何修改 string 的操作都会产生一个新的 string,而原始的 string 保持不变。相比之下,[]byte 是可变的切片,可以通过索引直接修改切片中的元素。
- 类型转换
可以在 string 和 []byte 之间进行类型转换。使用 []byte(s) 可以将 string 转换为 []byte,而使用 string(b) 可以将 []byte 转换为 string。这个操作会创建新的底层数组,因此在转换后修改其中一个不会影
响另一个。
- 内存分配
string 是一个不可变的视图,底层数据是只读的。string 的内存分配和释放由Go运行时管理。
[]byte 是一个可变的切片,底层数据是可以修改的。[]byte 的内存管理由程序员负责。
- Unicode字符
string 中的每个元素是一个 Unicode 字符,而 []byte 中的每个元素是一个字节。因此,string 可以包含任意字符,而 []byte 主要用于处理字节数据。
make和new的区别
make和new是两个用于分配内存的内建函数, 在使用场景和返回值类型上有明显的区别。
make 用于创建并初始化切片、映射和通道等引用类型。它返回的是被初始化的非零值(非nil)的引用类型。
// 创建并初始化切片 slice := make([]int, 5, 10)
// 创建并初始化映射 myMap := make(map[string]int)
// 创建并初始化通道 ch := make(chan int)
new 用于分配值类型的内存,并返回该值类型的指针。它返回的是分配的零值的指针。
// 分配整数类型的内存,并返回指针 ptr := new(int)
全站分卷索引 · 29 卷
- 1代码随想录知识星球精华(最强八股文)第五版(Go篇))
- 2Go string 和 []byte 的区别
- 3数组和切片的区别
- 4扩容前后的Slice是一样的吗
- 5Go语言map是有序的还是无序的, 为什么
- 6go里面的map是并发安全的吗?如何并发安全
- 7Go 的错误处理和 Java 的异常处理对比
- 8介绍一下panic和recover
- 9什么是defer?有什么作用
- 10Go并发
- 11进程、线程的区别
- 12什么是go runtine
- 13Go语言中的Channel是什么, 有哪些用途,如何处理阻塞
- 14什么是互斥锁(mutex)?在什么情况下会用到它们?
- 15Mutex有几种模式
- 16goroutine什么情况会发生内存泄漏?如何避免。
- 17Go语言中GC的流程是什么
- 18Go 中的内存逃逸现象是什么?
- 19CAP 理论,为什么不能同时满足
- 20说一下 Gin 的路由怎么实现的
- 21简述slice的底层原理,和数组的区别是什么
- 22defer底层原理
- 23侵入式和非侵入式的区别
- 24goroutine与线程的区别
- 25goroutine在什么情况下会被挂起呢?
- 26GC(垃圾回收)原理 1.5版本
- 27简述Go的垃圾回收机制
- 28协程优势及其通信方式
- 29Go的内存对齐