登录
首页 >  Golang >  Go问答

Go 语言中的自定义类型指针赋值操作

来源:stackoverflow

时间:2024-02-11 16:03:23 375浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《Go 语言中的自定义类型指针赋值操作》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我正在使用自定义类型,当涉及如下指针时,我遇到了问题。

下面的代码有效:

package main

import (
    "fmt"
)

type deck []string

func newdeck(cards ...string) deck {
    return cards
}

下面的代码也有效:

package main

func str(n []string) *[]string {
return &n
}

下面的代码无效。为什么这样?我必须编写像 return (*deck)(&cards) 这样的类型转换

package main

import (
    "fmt"
)

type deck []string

func newDeck(cards ...string) *deck {
    return &cards // compiles with return (*deck)(&cards)
}

正确答案


有关分配(包括返回)的规则在 Go specs: Assignability 中定义。与您的案例相关的规则是:

vt 具有相同的基础类型,并且 v 或 t 中至少有一个不是命名类型。

还有Underlying types

如果 t 是预先声明的布尔、数字或字符串类型之一,或类型文字,则相应的基础类型是 t 本身。

第一个示例可以编译,因为 []string 是具有基础类型 []string (本身)的未命名类型文字,而 deck 是具有基础类型 []string (根据您的类型定义)的命名类型。

第二个示例无法编译,因为 *[]string*deck 都是未命名类型文字,它们本身是(不同的)基础类型。

要使第二个示例编译,您不能依赖直接赋值,但是,正如您发现的那样,请使用显式类型转换

return (*deck)(&cards)

由于以下rule,此转换有效:

忽略结构体标记(见下文),x 的类型和 t 是非命名类型的指针类型,并且它们的指针基类型不是类型参数,但具有相同的基础类型。

好了,本文到此结束,带大家了解了《Go 语言中的自定义类型指针赋值操作》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>