.(data_type) 方法到底调用/做什么?

2024-01-01

我遇到了一段使用过的代码.(string)方法。不知道这叫什么,我很难找到它。

这是我尝试理解的:

package main

import "fmt"
import "reflect"

func main(){
    var b interface{}
    b = "silly"

    fmt.Println(reflect.TypeOf(b.(string))) // we know that b 
                                            // is a string                     
                                            // at compile time

    fmt.Println(reflect.TypeOf(b))          // we do not

}

Result:

string
string

不过,我认为reflect.TypeOf发生在运行时,同时.(string)会告诉编译器b确实是一个字符串,这可以用来告诉编译器变量是某种类型。我的理解对吗?

去游乐场 https://play.golang.org/p/eTz3HXH3fc


b.(string)被称为类型断言 https://golang.org/ref/spec#Type_assertions。正如所写有效的行动 https://golang.org/doc/effective_go.html#interface_conversions:

类型断言采用接口值并从中提取指定显式类型的值。

所以,是的,从类型断言中获得的值不是接口值,而是显式类型。您还可以通过添加无类型布尔值来测试类型断言是否成功:

s, ok := b.(string) // s is of type string
if !ok {
    // b did not contain a value of type string!
}

Edit:

进一步解释以消除任何可能的误解:

类型断言不“告诉 Go b 是一个字符串”正如你所建议的。它的作用是在运行时尝试从b,如果出现恐慌b包含一些其他类型(除非分配可选的布尔值)。

从断言中获得的值确实是类型string,允许您执行诸如切片(不能切片接口值)或检查其值之类的操作len.

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

.(data_type) 方法到底调用/做什么? 的相关文章

  • Golang GAE - 小胡子结构中的 intID

    这是一个Example https www dropbox com sh ur2ws1jnik6euef PjVJSwDTUc Blog Golang zip该应用程序的 关键代码在 golang code handler handler
  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • 如何在 Linux 中编写文本模式 GUI? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 当我编写脚本 程序时 我经常想弹出一个简单的文本 gui 来提示输入 我该怎么做 例如 来自 Shel
  • 复杂数据类型作为 Go 中映射的键

    我正在尝试在 Go 中创建一个由大整数作为键的映射 effective Go 明确指出 结构体 数组和切片不能用作映射键 因为这些类型上没有定义相等性 这是有道理的 我当然可以将大整数转换为字符串并使用字符串作为键 但我在这里寻找更通用的解
  • “go.tools”的权限被拒绝错误

    当我尝试安装 go 工具时 我的权限被拒绝 usr local go pkg tool linux amd64 cover 我可以接受 因为它是 usr local 目录及需求root使用权 但我的第一个疑问是为什么当我设置时它试图安装在这
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • 如何确定 go 中当前运行的可执行文件的完整路径?

    我一直在 osx 上使用这个函数 Shortcut to get the path to the current executable func ExecPath string var here os Args 0 if strings H
  • 如何修复“缺少表的 FROM 子句条目”错误

    我正在尝试根据游戏 ID 获取平台名称 我有如下三个表 我正在尝试加入它们以获得所需的结果 Games Id 1 2 3 4 Game Platforms Id game id platform id 1 1 1 2 1 2 3 3 3
  • Golang 中的确定性 RSA 加密 - 如何在多次加密下为给定消息获得相同的结果

    对于下面的RSA加密代码 每次对同一条消息进行加密时 结果都会不同 我发现这是由于rand Reader in the rsa EncryptOAEP功能使其更加安全doc https pkg go dev crypto rsa Encry
  • 实现具有更广泛方法签名的接口

    在Go中 是否有一种方法可以使用方法来实现接口 其中实现中相应方法的返回类型 比 预期返回类型 更宽 这很难解释 所以这里有一个例子 在 Go Playground 中运行以下示例代码时出现此错误 prog go 36 14 cannot
  • golang.org 包和标准库之间的区别

    我使用 go 已经有一段时间了 我注意到 Go 标准库 和 golang org x 之间存在重复的包 我的问题是 为什么它们被释放两次 在这两者中 我应该使用哪一个 更新的 规范的等 到目前为止我注意到的一些示例包已发布两次 golang
  • 关闭长度未知的通道

    当不了解频道时我无法关闭频道 length package main import fmt time func gen ch chan int var i int for time Sleep time Millisecond 10 ch
  • Go 编译器有窗口化设置选项吗?

    我正在使用 Go 6g 编译 GTK 应用程序 我想知道是否有编译器 链接器选项使其成为 Windows 可执行文件而不是控制台可执行文件 MinGW 有一个 mwindows 选项来实现此目的 目前我必须使用十六进制编辑器手动更改 PE
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • “http:多个response.WriteHeader调用”有什么不好的影响?

    尽管我发现 http 多个响应 WriteHeader 调用 例外 但我的服务器表现良好 此异常不会导致我的服务器出现恐慌或行为异常 我进行了很多搜索 但只找到了如何解决这个问题 没有文档描述异常的不良影响 有人可以帮我找出为什么 http
  • 如何将长 Go 模板函数拆分为多行?

    我有一个很长的printf调用 Go 模板 例子 printf mongodb s s s s authSource admin replicaSet s readPreference nearest w majority Values r
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • 如何在 Go 中获取给定月份的第一个星期一?

    我正在尝试获取给定月份的第一个星期一 我能想到的最好方法是循环前 7 天 然后返回 Weekday Monday 有一个更好的方法吗 通过查看时间的 Weekday 您可以计算出第一个星期一 package main import fmt

随机推荐

  • 禁用 Spring Cloud AWS 自动配置以进行本地开发

    我使用以下 Maven 依赖项 它会自动配置所有必要的参数 使我的项目在 AWS 上运行
  • 从rails日志文件中提取错误信息

    我正在开发 5 个不同的 Rails 项目 另外还重构了一些项目 从旧的 Rails 版本移动到 2 3 从日志文件中提取错误信息的最佳方法是什么 这样我就可以看到所有折旧警告 运行时错误等上 这样我就可以改进代码库了 有没有您可以推荐的服
  • javax.crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是 16 的倍数 [重复]

    这个问题在这里已经有答案了 我在 java 类中遇到解密错误 javax crypto IllegalBlockSizeException Input length must be multiple of 16 when decryptin
  • jQuery 和 PHP 建议答案

    嘿伙计们 有一个表单 用户可以选择他的一些朋友 我很好奇如何实现一个列表 在用户输入朋友的名字时同时进行搜索 当他选择名字时 名字会写在文本框 jQuery 如果用户想要选择多个朋友 当我在数据库中插入姓名时 如何分隔一个输入字段中写入的姓
  • Dart / Flutter:Isolate 顶级函数的异步行为

    哎呀好人 我遇到了奇怪的行为 当异步使用isolate的顶层函数时 你可以找到示例代码HERE https github com iapicca isolates logging 但简而言之 as 隔离的顶级功能这有效 String syn
  • 为什么 Visual Studio 2012 中自动解决冲突默认处于启用状态?

    我们最近安装了 Visual Studio 2012 我正在与我们团队的另一名成员一起开发一个全新的项目 使用 Team Foundation Server 2010 进行源代码控制 我最近注意到我的一些文件在签入时被随机损坏 然后在输出窗
  • Angular 4 延迟加载命名路由器出口不起作用

    我有一个延迟加载的问题 不打算路由到指定的路由器出口 有人可以看看我错在哪里吗 我有一个主页 其中有一个指向 产品 gt 默认路由器出口 和 产品详细信息 gt 命名路由器出口 的链接 div div a Product a div div
  • React 仅在加载时调用一次方法

    我是 Hooks 新手 遇到过一些让我陷入困境的情况 希望有人可以解释或提供对我有意义的解决方案 在组件安装时仅加载一次方法会令人困惑 我尝试了这个方法 有效 但是不明白 谁可以给我解释一下这个 const useMountEffect f
  • POST JSON 失败,并显示 415 不支持的媒体类型,Spring 3 mvc

    我正在尝试向 servlet 发送 POST 请求 请求通过 jQuery 发送 如下所示 var productCategory new Object productCategory idProductCategory 1 product
  • 在 Javascript ECMAScript 6 中从类名创建对象

    我想使用 ES6 创建对象工厂 但旧式语法不适用于新语法 我有下一个代码 export class Column export class Sequence export class Checkbox export class Column
  • 3分钟了解什么是反射?

    许多 Net 面试问题列表 包括好的人 http www hanselman com blog WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions aspx 包含问题 什么是
  • java中的encode(, 'escape') PostgreSQL等效项是什么?

    我有一个 bytea 列存储在 Postgresql 数据库中 列名 测试 Ex x61736461640061736461736400 当我在选择查询中使用encode test escape 时 我得到这样的结果 Ex asdad 00
  • 使用字段重写无参数方法时出现空指针异常

    我正在研究 Scala 中的编程 它说您可以使用字段覆盖无参数方法 广告给出了以下示例 abstract class Element def contents Array String val height Int contents len
  • 使用正则表达式

    这个正则表达式有什么问题 我需要它使 name 仅包含字母数字 现在看来根本不起作用了 if preg match A Za z0 9 name e name must contain only letters or numbers 您需要
  • iPhone-SDK 的最佳 SQLite 3 教程在哪里? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何让我的应用程序使用 Windows 主题?

    我正在使用一些 Windows API 来创建一个小应用程序 我已经创建了按钮 窗口 好吧 但问题是我创建的组件看起来不像操作系统主题 它们看起来很简单 请参阅按钮作为示例 如何启用 Windows 主题 它可以是 C 语言或 Delphi
  • Sprite-Kit 在触摸屏幕时更改节点的图像

    有一个通过点击屏幕来控制的英雄 我希望每次触摸屏幕时英雄看起来都有点不同 我所做的是设置两个略有不同的图像 我希望在发生触摸事件时改变英雄的形象 到目前为止 我设置了一个数组来保存信息 但它有点行不通 NSMutableArray hero
  • 我们可以在 c++ 中使用 POSIX C 库吗?

    我是 Linux 系统编程领域的新手 我目前使用 C 编程 想切换到 C 我们可以在 c 中使用 POSIX C 库中定义的所有函数而不进行任何更改吗 原则您应该能够使用 C 中的任何 C API 该语言包含有利于它的功能 大多数 C 库作
  • 修改R中x轴上的日期格式?

    我想更改 R 中月份年份的绘图格式 所以目前它也显示日期 我只想显示月份年份 With my data http uploadeasy net upload 6nhi rar和 R 代码 plot alvdate 1250 1600 c N
  • .(data_type) 方法到底调用/做什么?

    我遇到了一段使用过的代码 string 方法 不知道这叫什么 我很难找到它 这是我尝试理解的 package main import fmt import reflect func main var b interface b silly