gpt4 book ai didi

go - 这是在 golang 中类型转换吗?

转载 作者:IT王子 更新时间:2023-10-29 02:23:39 32 4
gpt4 key购买 nike

paxPayment, ok = dataObject.(*entities.PassengerPayment)
括号是干什么用的?我不确定这个分配操作中发生了什么。

你需要更多细节来回答这个问题吗?

最佳答案

这是一个 Type assertion .类型断言可用于:

  • 从接口(interface)类型的值中获取具体类型的值
  • 或者获取与初始接口(interface)类型不同的接口(interface)类型的值(具有不同 method set 的接口(interface),实际上不是原始接口(interface)的子集,因为可以简单地使用简单类型 conversion 获得)。

  • 引用规范:

    For an expression x of interface type and a type T, the primary expression

    x.(T)

    asserts that x is not nil and that the value stored in x is of type T. The notation x.(T) is called a type assertion.

    More precisely, if T is not an interface type, x.(T) asserts that the dynamic type of x is identical to the type T. In this case, T must implement the (interface) type of x; otherwise the type assertion is invalid since it is not possible for x to store a value of type T. If T is an interface type, x.(T) asserts that the dynamic type of x implements the interface T.


    更具体地说,您的示例是它的一种特殊形式,它还报告类型断言是否成立。如果没有, ok将是 false ,如果断言成立, ok将是 true .
    与以下形式不同,这种特殊形式永远不会发生 panic :
    paxPayment = dataObject.(*entities.PassengerPayment)
    如果 dataObject不包含 *entities.PassengerPayment 类型的值会 panic 。

    关于go - 这是在 golang 中类型转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33819546/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com