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

Golang类型断言

松和安
2023-03-14
问题内容

我已经创建了一个基于字符串的角色类型,现在我想通过实现Valuer和Scanner接口使其与数据库驱动程序一起使用

type Role string

func (r *Role) Scan(value interface{}) error {
    r = (*Role)(value.(string))

    return nil
}

func (r *Role) Value(value driver.Value, err error) {
    if err != nil {
        value = string(r)
    }
}

我不断收到错误:

The Go code app/entities/user.go does not compile: cannot convert value.(string) (type string) to type *Role

我在这里做错了什么?


问题答案:

这是第一个功能的工作代码:

func (r *Role) Scan(value interface{}) error {
    *r = Role(value.(string))
    return nil
}

尽管您可能希望使用s, ok := value.(string)并返回一个错误来!ok代替恐慌。

a的签名driver.Valuer不是您给的,而是:

func (r Role) Value() (driver.Value, error) {
    return string(r), nil
}

请注意,这不会处理或产生NULL值。

Playground



 类似资料:
  • 本文向大家介绍浅谈golang类型断言,失败类型断言返回值问题,包括了浅谈golang类型断言,失败类型断言返回值问题的使用技巧和注意事项,需要的朋友参考一下 失败的类型断言,返回的值为最近断言类型的零值 代码入下: 补充:go语言interface{}类型断言的举例使用 在go语言里经常会用到interface{}类型,它是类似于c语言中的void *类型,可以接受任意类型的参数。当我们的函数或

  • 7.10. 类型断言 类型断言是一个使用在接口值上的操作。语法上它看起来像x.(T)被称为断言类型,这里x表示一个接口的类型和T表示一个类型。一个类型断言检查它操作对象的动态类型是否和断言的类型匹配。 这里有两种可能。第一种,如果断言的类型T是一个具体类型,然后类型断言检查x的动态类型是否和T相同。如果这个检查成功了,类型断言的结果是x的动态值,当然它的类型是T。换句话说,具体类型的类型断言从它的

  • 问题内容: 我知道我可以通过反射来获取对象的值,然后使用类型断言使用以下方法来获取实际对象: 但是,如果我不知道对象的类型是,该怎么办呢?说它在像这样的函数中: 在函数内部,您将永远不知道实际上将传递哪种类型的对象,那么如何完成类型声明? 问题答案: 你不能 类型断言使您可以利用语言为您提供的静态类型检查,即使您有一个接口,其类型不是静态检查的。基本上它是这样的: 你有一些静态类型的变量,它有型。

  • 编辑:OK,在typescript规范中有详细说明:类型断言

  • 本节介绍类型断言,有使用关键字 as 和标签 <> 两种方式,因后者会与JSX 语法冲突,建议统一使用 as 来进行类型断言。 1. 慕课解释 TypeScript 允许你覆盖它的推断,毕竟作为开发者你比编译器更了解你写的代码。 类型断言主要用于当 TypeScript 推断出来类型并不满足你的需求,你需要手动指定一个类型。 2. 关键字 as 当你把 JavaScript 代码迁移到 TypeS

  • Variant对象的isXXX系列方法可以用于判断变量的类型。 整型 var.isInt(); 浮点型 var.isFloat(); 字符串 var.isString(); 布尔型 var.isBool(); 对象 var.isObject(); 数组 var.isArray(); NULL类型 var.isNull(); 资源类型 var.isResource();