一尘不染

在Golang错误中从一个指针转换为另一个指针类型

go

谁能告诉我为什么无法编译?

package main

type myint int
func set(a **myint) {
    i := myint(5)
    *a = &i 
}

func main() {
    var k *int
    set( (**myint)(&k) ) // cannot convert &k (type **int) to type **myint
    print( *k )
}

到目前为止,我的推理是这样。Golang中的所有类型都不同,但是只要基础类型相同,它就可以使用类似C的转换语法将一种类型转换为另一种类型。在我的示例中,将“
int”转换为“ myint”不是问题。’ int’到’ myint’也不是。当您有指针问题出现时。我已经坚持了第二天。任何帮助表示赞赏。


阅读 245

收藏
2020-07-02

共1个答案

一尘不染

这是我的分析。

(**myint)(&k)-无法将&ktype **int)转换为type **myint

type **inttype **myint是未命名的指针类型及其指针的基本类型,type *inttype *myint并没有相同的基础类型。

如果T(*int*myint)是指针类型文字,则对应的基础类型是T本身。

(*myint)(k)-可以将ktype *int)转换为type *myint

type *inttype *myint是未命名的指针类型,它们的指针基本类型type inttype myinttype myint int)具有相同的基础类型。

如果T(int)是预声明的类型,则对应的基础类型是T本身。如果T(myint)既不是预先声明的类型也不是类型文字,则T的基础类型是T在其类型声明(type myint int)中引用的类型的基础类型。

(myint)(*k)-可以将*ktype int)转换为type myint

type inttype myint具有相同的基础类型。

如果T(int)是预声明的类型,则对应的基础类型是T本身。如果T(myint)既不是预先声明的类型也不是类型文字,则T的基础类型是T在其类型声明(type myint int)中引用的类型的基础类型。

这是来自Types部分的基础类型示例,将其修改为使用整数和int指针。

type T1 int
type T2 T1
type T3 *T1
type T4 T3

基础类型的intT1T2int。基础类型的*T1T3T4*T1

参考文献:

Go编程语言规范

转换次数

种类

类型和值的属性

类型声明

预声明的标识符

指针类型

2020-07-02