Golang 语言基础之六: string, pointer
Golang 语言基础系列:
- Golang 语言基础之一: type, variable, constant
- Golang 语言基础之二: for, ifelse, switch
- Golang 语言基础之三: array, slice
- Golang 语言基础之四: map, range
- Golang 语言基础之五: function
- Golang 语言基础之六: string, pointer
- Golang 语言基础之七: struct, method
- Golang 语言基础之八: interface
- Golang 语言基础之九: error, panic, recover
- Golang 语言基础之十: goroutine, channel
字符串类型 string
字符串在 Golang 源码文件 runtime.h
中的定义如下:
可以看出,其内部包含一个 byte
类型的数组,Golang 采用 UTF-8 编码方式。和 C/C++ 的字符数组不同,Golang 的字符数组有下面的特点:
string
类型的零值为空字符串。
- 不能用序号获取字节元素指针,&s[i] 为非法。
string
是不可变类型,其内部存储数据的字符数组无法修改。如需修改,需要将 string
对象转化为 rune
类型(如果字符串含有非 ASIC 码字符)或者 byte
类型(如果字符串由 ASIC 码字符组成)的 slice
对象。修改后的字符数组会重新分配内存保存在一个新的字符串对象中。
- 字节数组尾部不包含
\0
关于 string
的使用方法我们看个例子:
将上面的代码存入源文件 string.go 并使用 go run string.go
可以看到下面的输入:
指针类型 pointer
Golang 中的指针和 C/C++ 相同的地方有:
- 指针 *T
- 指针的指针 **T
- 通过 operator
*
访问指针指向的对象,&
取对象的地址
不同的地方有:
- 指针的默认值为
nil
,而不是 NULL
- 指针不能进行加减运算,指针所指对象的成员使用
.
访问而非 ->
- 使用
unsafe.Pointer
可以对指向不同类型对象的指针进行转换
- 指针不能进行
+
、-
运算,以保证安全性。
使用实例如下:
将上面的代码存入源文件 pointer.go 并使用 go run pointer.go
可以看到下面的输入:
关于 unsafe.Pointer
,建议阅读这篇文章,里面做了很好的总结。
参考资料
-- EOF --
有疑问加站长微信联系(非本文作者)