我的编程空间,编程开发者的网络收藏夹
学习永远不晚

确定 Golang 中函数返回的接口 {} 值的类型

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

确定 Golang 中函数返回的接口 {} 值的类型

问题内容

我有一个从枚举返回值的函数。枚举定义如下:

type DataType int64

const (
    INT DataType = iota
    FLOAT
    STRING
    BOOL
    CHAR
    VOID
    ERROR
    BREAK
    CONTINUE
)

    func (l *TSwiftVisitor) VisitWhileInstr(ctx *parser.WhileInstrContext) interface{} {        
    if condExpression.ValType == BOOL {             
        condResult := condExpression.asBool()       
        for condResult {            
            for _, currentInstr := range ctx.InstrList().AllInstr() {
                execResult := l.Visit(currentInstr)
                fmt.Printf("TYPE -> %T\n", execResult) // Prints exec.DataType (the type)
                fmt.Printf("VALUE -> %v\n", execResult) // Prints 5 (the enum value)
                if execResult == BREAK { // This never executes
                    fmt.Println("Es break")
                    return VOID
                } else { // This executes
                    fmt.Println("Es otra mierda")
                }
            }           
            condResult = l.Visit(ctx.Expr()).(*Expression).asBool()
        }       
    } else {
        return ERROR
    }
    return VOID
}

Visit方法的签名如下

Visit(tree antlr.ParseTree) interface{}

调用该方法后,我收到一个 DataType 类型的值,并在以下几行中打印该类型和返回值。

fmt.Printf("TYPE -> %T\n", execResult) // Prints exec.DataType (the type)
fmt.Printf("VALUE -> %v\n", execResult) // Prints 5 (the enum value)

输出如下:

TYPE -> exec.DataType                   
VALUE -> 5

到目前为止,一切都很好,但是我需要进行比较,这就是我遇到的问题,那就是我对 Golang 不太了解。我有以下内容:

if execResult == BREAK { // This never executes
    fmt.Println("It's a break")
    return VOID
} else { // This executes
    fmt.Println("It's another thing")
}

这就是我不知道如何继续验证返回类型的地方,如果我尝试以下几行,我永远不会执行我想要的代码,在本例中是返回 VOID。我的问题是如何比较返回类型以根据结果执行特定操作。我还尝试过以下方法:

switch execResult.(type) {
    case DataType:
        if execResult.(DataType) == BREAK {

            return execResult
        }
}

在这种情况下,开关内的情况也不满足。我的问题基本上是如何确定从函数调用返回的接口{}值的类型。


正确答案


我认为@Charlie Tumahai 是对的:问题是价值观不匹配。我尝试了 Go Playground 上的一个小示例,它的工作原理与我们预期的一样:如果 DataType 是从 Visit 返回,然后与 DataType 的比较可以为 true。

返回的类型必须DataType 类型。 Visit2 方法演示了这一点:它返回一个 int64,它永远不会等于 BREAK

Go 编程语言规范中的比较运算符下对此进行了介绍:

package main

import "fmt"

type DataType int64

const (
    INT DataType = iota
    BREAK
    CONTINUE
)

func Visit() interface{} { return BREAK }
func Visit2() interface{} {return int64(BREAK) }

func main() {
    for _, x := range []interface{}{Visit(), Visit2()} {
        fmt.Printf("x = %v, T(x) = %T : ", x, x)
        if x == BREAK {
            fmt.Println("x is BREAK")
        } else {
            fmt.Println("Cannot identify x")
        }
    }

    // Output:
    // x = 1, T(x) = main.DataType : x is BREAK
    // x = 1, T(x) = int64 : Cannot identify x
}

以上就是确定 Golang 中函数返回的接口 {} 值的类型的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

确定 Golang 中函数返回的接口 {} 值的类型

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

确定 Golang 中函数返回的接口 {} 值的类型

问题内容我有一个从枚举返回值的函数。枚举定义如下:type DataType int64const (INT DataType = iotaFLOATSTRINGBOOLCHARVOIDERRORBREAKCONTINUE)func
确定 Golang 中函数返回的接口 {} 值的类型
2024-02-05

C++ 函数的返回值类型如何确定?

函数的返回值类型声明了函数将返回的值类型,避免类型不匹配和错误。确定返回值类型要考虑函数目的、操作、调用代码和可重用性。可选择的基本类型、结构体、类、指针和引用作为返回值类型。C++ 函数的返回值类型在 C++ 中,函数的返回值类型声明了
C++ 函数的返回值类型如何确定?
2024-04-19

golang函数返回值的类型转换

函数返回值类型转换分为两种方式:type assertion 检查值与特定类型是否兼容,不兼容则报错;type conversion 不检查兼容性,直接转换。实战中,可将浮点型转换为整数,或将元组中的整数转换为字符串。Go 语言中函数返回值
golang函数返回值的类型转换
2024-04-23

golang函数返回值的常用类型

go 函数的常见返回值类型包括:基本类型(bool、数字、string)复合类型(数组、切片、映射、结构体)实战案例中返回布尔值表示用户是否成年其他类型(通道、生成器函数)选择返回值类型时需考虑函数目的、返回值信息量和与调用代码的交互。Go
golang函数返回值的常用类型
2024-04-23

PHP 函数返回值的类型可以是怎么确定的?

php 函数返回值类型的确定方法包括:1. 使用 typehint 声明;2. 根据函数定义推断;3. 使用 gettype() 函数;4. 使用第三方库(如 psalm 和 phpstan)。PHP 函数返回值的类型确定方法1. 使用
PHP 函数返回值的类型可以是怎么确定的?
2024-04-15

golang函数返回值的类型与意义

go 函数可以返回指定类型的值,包括基本类型、复合类型和引用类型。返回值的类型和意义如下:error 类型:指示操作失败。布尔值 (bool):表示成功或失败。其他类型:表示操作的结果。Go 函数返回值的类型与意义在 Go 语言中,函数可
golang函数返回值的类型与意义
2024-04-26

Golang 函数返回值的类型是什么?

go 函数可以返回多个不同类型的值,返回值类型在函数签名中指定,并通过 return 语句返回。例如,函数可以返回一个整数和一个字符串:func getdetails() (int, string)。实战中,一个计算圆面积的函数可以返回面积
Golang 函数返回值的类型是什么?
2024-04-13

golang函数返回值的类型是什么?

go 函数可返回一个或多个类型的值,需在签名中明确指定。单返回值函数返回特定类型的单个值,而多返回值函数返回按顺序指定类型的多个值。实际应用中,如计算两个数字最大公约数 (gcd) 的函数,可按需返回特定类型的 gcd 值。Go 语言函数返
golang函数返回值的类型是什么?
2024-04-22

Golang 函数返回值类型推导的机制

go 语言中,函数返回值类型推导机制存在,编译器根据规则推导出返回值类型:多个返回值:每个返回值推导出实际类型。单个返回值未指定类型:推导出与实际值相同类型。无返回值:推导出 void 类型。Golang 函数返回值类型推导的机制在 Go
Golang 函数返回值类型推导的机制
2024-05-23

如何根据 PHP 函数的签名确定其返回值的类型?

通过检查函数签名,我们可以确定其返回值类型:@return 标签标明返回值类型。类型提示指定类型。类文档提供返回值信息。如何根据 PHP 函数的签名确定其返回值的类型在 PHP 中,函数签名由其名称和参数列表组成。通过检查函数签名,我们可
如何根据 PHP 函数的签名确定其返回值的类型?
2024-04-15

C++ 函数的返回值类型如何指定?

c++++ 函数的返回值类型指定在函数声明中,它指示函数执行后返回的值的数据类型。常见的数据类型包括 void(无返回值)、基本数据类型、结构体、类和指针。返回值类型必须与函数体中实际返回的值的数据类型匹配,否则会出现编译错误。C++ 函数
C++ 函数的返回值类型如何指定?
2024-04-18

C++ 函数中是如何定义返回值类型的?

c++++ 函数中返回值类型的定义在函数签名的括号前。它表示函数返回的数据类型:return_type function_name(parameter_list)例如,如果函数返回整数和并计算两个数字,则语法为:int add(int nu
C++ 函数中是如何定义返回值类型的?
2024-04-13

C++ 函数返回值类型的常见类型

c++++ 函数返回类型包括:void(无返回值)、基本类型(整数、浮点数、字符和布尔值)、指针、引用、类和结构。选择时,应考虑功能、效率和接口。如计算阶乘的 factorial 函数,返回整数类型以满足功能需求和避免额外操作。C++ 函数
C++ 函数返回值类型的常见类型
2024-04-12

c++中规定函数的返回值类型由什么决定

在 c++ 中,函数的返回值类型在函数声明中指定,由声明中的 float 类型确定,例如,函数 addnumbers 声明为接收两个浮点数参数并返回一个浮点数。在 C++ 中,函数的返回值类型是由 函数声明 中规定的。当声明一个函数时,您
c++中规定函数的返回值类型由什么决定
2024-05-14

PHP 函数返回值的类型是如何指定的?

php 中函数返回值的类型可以通过类型提示指定,包括以下步骤:在函数声明后使用冒号 (:)。指定期望的返回类型。php 支持内置类型和自定义类型。类型提示提高了代码的可读性、可维护性和可测试性。PHP 函数返回值的类型是如何指定的?在 P
PHP 函数返回值的类型是如何指定的?
2024-04-11

c++中函数返回值的类型是由什么决定的

在 c++ 中,函数返回值类型由其函数原型的类型决定,包括:函数原型指定返回值类型:在函数名称后跟冒号,再跟返回值类型。默认返回值类型为 int:如果不指定返回值类型,默认类型为 int。返回值类型可以是基本类型、自定义类型或 void(不
c++中函数返回值的类型是由什么决定的
2024-05-14

如何确定 Golang 函数的类型?

如何确定 go 函数的类型?有以下方法:使用 go 语言文档、使用代码编辑器、使用 typeof 运算符。如何确定 Go 函数的类型?在 Go 语言中,函数类型是一个重要的概念,它描述了函数的参数和返回值类型。确定函数的类型可以帮助我们理
如何确定 Golang 函数的类型?
2024-04-21

C++中的自定义函数返回类型

这篇文章主要介绍了C++中的自定义函数返回类型,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录