当前位置: 首页 > 面试题库 >

。(data_type)方法究竟调用/做什么?

卞博简
2023-03-14
问题内容

我遇到了使用.(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

}

结果:

string
string

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

游乐场


问题答案:

b.(string)被称为 类型断言 。如
有效围棋中所述


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

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

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

编辑:

为了进一步说明以消除任何可能的误解:

类型断言不会像您建议的那样 “告诉go b是字符串”
。它的作用是,它将在运行时尝试从中提取一个字符串b,如果b包含其他类型,则会恐慌(除非分配可选的bool值)。

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



 类似资料:
  • 问题内容: 我有一些代码来计算圆的属性: 它计算周长,但不计算其余部分。 问题答案: 是一个,也一个,这意味着不能在第二个打印语句中使用。试试那里。 回想一下,这是浮点数,而整数。在的文档中对此进行了概述(请参阅“ 格式化字符串语法”)。

  • 问题内容: 我在jquery图像滑块演示中找到了reset.css文件,但它从未包含在主index.html文件中。应该做什么,更重要的是,您将它放在哪里?你把它之前 任何引用的样式表()? 这是reset.css内部的代码 问题答案: 最初,关于样式的工作方式还没有标准化,每个浏览器都实现了自己认为正确的方式。您在IE中看到太多有关样式错误的问题的原因之一是,因为IE是样式方面与其他浏览器最不相

  • 问题内容: 因此,我试图掌握在Android中使用自定义控件的方法。但是我的应用在尝试创建活动时崩溃。这是代码: 这是布局xml: 问题答案: 您将需要实现以下构造函数: 例如,尝试执行以下操作: 您将在logcat中获得以下内容: 因此要将这些XML属性传递给Super类(EditText),您必须重写这些构造函数。 希望对您有所帮助。

  • 问题内容: 设置或设置为弹性项目而不是设置之间有区别吗? 是属性的“转折点” 吗? 当我设置浏览器时,如何确定将项目下移到新行的哪一点?是根据他们的宽度还是“弹性基础”? 示例:最后两个框具有相同的功能,但是当窗口在300px至400px之间时, 只有 其中一个向下移动。为什么? 问题答案: 允许您在计算其他任何内容之前指定元素的初始/开始大小。它可以是百分比或绝对值。 但是,它 不是 弯曲增长/

  • 内部构造函数的准确定义是什么?在Julia-V0.6+中,“任何可以使用签名(注意部分)调用的构造函数都是内部构造函数”是正确的吗? 正如下面的注释中所讨论的,仅限于外部的构造函数实际上是吗? 使用检查方法是否是内部/外部构造函数是否正确? Julia自动定义的默认构造函数与用户显式定义的相应构造函数有什么不同? 顺便说一句,我知道如何使用以及何时使用内部构造函数。我知道什么是内部构造函数,直到只

  • 本文向大家介绍深入探究C++ string的内部究竟是什么样的,包括了深入探究C++ string的内部究竟是什么样的的使用技巧和注意事项,需要的朋友参考一下 在C语言中,有两种方式表示字符串: 一种是用字符数组来容纳字符串,例如char str[10] = "abc",这样的字符串是可读写的; 一种是使用字符串常量,例如char *str = "abc",这样的字符串只能读,不能写。 两种形式总