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

前端之家收集整理的这篇文章主要介绍了指针 – 在Golang错误中从一个指针转换为指针类型到另一个指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
任何人都可以告诉我为什么这不会编译?
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’也不是.当你有指针指针出现的时候.我现在第二天就被困在了这里.任何帮助是赞赏.

这是我的分析

(** myint)(& k) – 无法将& k(type ** int)转换为** myint类型:

键入** int和类型** myint是未命名的指针类型和它们的指针基类型,类型* int和类型* myint,没有相同的底层类型.

如果T(* int或* myint)是指针类型文字,则相应的底层类型是T本身.

(* myint)(k) – 可以将k(type * int)转换为* myint类型:

键入* int和类型* myint是未命名的指针类型和它们的指针基类型,类型为int和类型myint(类型myint int)具有相同的底层类型.

如果T(int)是预先声明的类型,则相应的底层类型是T本身.如果T(myint)既不是预先声明的类型也不是类型文字,T的底层类型是T类型声明中引用的类型的底层类型(type myint int).

(myint)(* k) – 可以将* k(类型int)转换为类型myint:

键入int和类型myint具有相同的底层类型.

如果T(int)是预先声明的类型,T的底层类型是T类型声明中引用的类型的底层类型(type myint int).

这里是从类型部分修改为使用整数和int指针的底层类型示例.

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

int,T1和T2的底层类型是int. * T1,T3和T4的基本类型是* T1.

参考文献:

The Go Programming Language Specification

Conversions

Types

Properties of types and values

Type declarations

Predeclared identifiers

Pointer Type

原文链接:https://www.f2er.com/go/186804.html

猜你在找的Go相关文章