来自维基百科:
某些编程语言将指针公开为数值,并允许用户对它们执行算术运算。这些语言有时被称为“弱类型”,因为指针算术可用于绕过语言的类型系统。
这就是 C 被认为是“弱类型”语言的原因之一。
但是 Go 呢?它还使用指针(包括“不安全指针”)。那么,它是属于强类型还是弱类型?
我们不能将 Go 指针视为数值。 Go 中的指针是存储另一个变量的内存地址的变量。它们本身不是数字,不能用于算术运算。 例如,以下代码将无法编译: 包主
import "fmt"
func main() {
var p *int
p = 10 // This will not compile
}
编译器将出现错误,并显示消息“cannot use 10 (type int) as type *int in assignment”。这是因为 10 是一个数值,而 p 是一个指向整数的指针。我们无法将数值分配给指针。
但是,我们可以使用 * 运算符来取消引用指针并访问它指向的值。例如,以下代码将编译并打印值 10:
package main
import "fmt"
func main() {
var p *int
p = new(int)
*p = 10
fmt.Println(*p) // This will print 10
}
因此 Go 是强类型的。