在 Go 中对多个返回值进行转换/类型断言的惯用方法

2024-02-14

在 Go 中转换多个返回值的惯用方法是什么?

您可以在一行中完成它,还是需要使用临时变量,就像我在下面的示例中所做的那样?

package main

import "fmt"

func oneRet() interface{} {
    return "Hello"
}

func twoRet() (interface{}, error) {
    return "Hejsan", nil
}

func main() {
    // With one return value, you can simply do this
    str1 := oneRet().(string)
    fmt.Println("String 1: " + str1)

    // It is not as easy with two return values
    //str2, err := twoRet().(string) // Not possible
    // Do I really have to use a temp variable instead?
    temp, err := twoRet()
    str2 := temp.(string)
    fmt.Println("String 2: " + str2 )


    if err != nil {
        panic("unreachable")
    }   
}

顺便问一下,它叫casting当谈到接口时?

i := interface.(int)

你不能用一行来完成它。 您的临时变量方法是正确的选择。

顺便问一下,接口的时候就叫casting吗?

它实际上被称为类型断言 http://golang.org/ref/spec#Type_assertions。 类型 cast 转换是不同的:

var a int
var b int64

a = 5
b = int64(a)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Go 中对多个返回值进行转换/类型断言的惯用方法 的相关文章

  • golang导入结构体指针

    好的 我有一个主包和一个 http 处理程序包 本质上我想做的是设置一个全局结构 这样我就可以随时调用该结构中的信息 我尝试的示例的基本概要如下 主包导入处理函数 主包调用handlerfunc Handlerfunc 将 http Res
  • 无法封送,(实现encoding.BinaryMarshaler)。具有多个对象的 go-redis Sdd

    我有下面一段代码 我试图将一个数组添加到 redis 集中 但它给了我一个错误 package main import encoding json fmt github com go redis redis type Info struct
  • GoLang - 坚持使用 ISO-8859-1 字符集

    我正在开发一个项目 我们需要将信息保存在具有 ISO 8859 1 表的旧数据库中 因此 在向数据库写入内容之前 我需要将其从 UTF 8 转换为 ISO 8859 1 每次从数据库检索它时 我都需要将其转换回 UTF 8 我试图使用图书馆
  • 如何避免大型 if 语句和 instanceof

    Animal public abstract class Animal String name public Animal String name this name name Lion public class Lion extends
  • 从父类返回子类

    我有一个构建器类 它从大多数方法返回自身以允许菊花链 为了使此功能适用于子类 我希望父方法返回子类的实例 以便子方法可以链接到末尾 public class BaseBuilder
  • Go MSSQL 连接

    如何提供 MSSQL 连接 它说它始终与代码相关 即使信息不正确 也不会报错 package main import database sql fmt github com denisenkom go mssqldb log var ser
  • 给定方法值,获取接收者对象

    Go 有没有办法从方法值获取接收者对象 例如有没有这样的MagicFunc这将使以下程序输出字符串my info来自底层 Foo 实例 package main import fmt type Foo struct A string fun
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • 类型转换为具有相同属性的另一个

    在我的应用程序的一个部分中 我使用从 xsd 方案生成的类型 我有 2 个版本的架构 2008 和 2009 我使用的类型是 DatumType 在每个方案中 该类型都包含相同的属性 它们是精确的 除了命名空间 有什么方法可以将 Datum
  • 装箱可为 null 的基础类型可以转换为枚举,但装箱枚举类型不能转换为可为 null 类型

    装箱可为空基础类型可以施展到枚举但盒装枚举类型无法投射为可空类型 同样 盒装可为空枚举可以施展为基础类型但装箱基础类型无法投射为可为空的枚举 好吧 我知道 盒装可为空类型 不是描述它的最佳方式 但这是为了解决问题 我知道这是被装箱的底层值类
  • 如何将未知字段类型的数据解组为 JSON

    我有这些 结构 type Results struct Gender string json gender Name struct First string json first Last string json last json nam
  • 视频第一帧

    我正在创建一个单页应用程序 后端使用 Golang 前端使用 javascript 我想找到一种使用 Golang 获取视频第一帧的方法 首先 我将 mp4 视频文件上传到服务器 它保存在服务器上 有没有办法使用 Golang 获取该视频的
  • 按引用或按值扫描功能

    我有以下代码 statement SELECT id from source where mgmt 1 var exists string errUnique dr db QueryRow statement mgmt Scan exist
  • Java 中的 C#“is”运算符替代方案 [重复]

    这个问题在这里已经有答案了 在 C 中 当我想知道一个对象是否是特定类型的实例时 我可以使用 is 运算符 String foo hi if foo is String 我怎样才能在java中做到这一点 我知道我可以使用 try 语句 还有
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • 如何在 Golang 中将 []byte XML 转换为 JSON 输出

    有没有办法在 Golang 中将 XML byte 转换为 JSON 输出 我有以下功能body is byte但我想在一些操作之后将此 XML 响应转换为 JSON 我试过了Unmarshal in xml打包没有成功 POST func
  • 指向基类的成员指针

    全部 我不明白为什么下面的代码需要强制转换才能工作 有人可以解释一下吗 class Base class Derived public Base class Class public Derived member Derived obj B
  • 如何从非英语字符串解析go中的月份

    我想将以下字符串解析为 go 中的日期 This item will be released on March 9 2014 我跟着this https stackoverflow com questions 14106541 go par
  • 作为!与 Swift 中 Xcode 6.3 中的 as 运算符对比

    Xcode 6 3 使 Swift 发生了很大变化 我必须更换每个应用程序中的数十个位置as gt as 为什么 现在有什么规则 在 Swift 1 2 之前 as运算符可用于执行两种不同类型的转换 具体取决于要转换的表达式的类型及其要转换

随机推荐