golang如何将interface转为struct结构体

栏目: Go · 发布时间: 7年前

内容简介:在golang中,但是,当我们以这样的形式传入函数中,在进行处理时我们需要区分interface类型(因为即便传入的举个栗子:

在golang中, interface{} 允许接纳任意值,int, string, struct等,因此我可以很简单的将值传递到interface{},例如:

package main
import (
    "fmt"
)
type User struct{
    Name string
}
func main() {
    any := 1
    test(any)
    any = "fidding"
    test(any)
    any := User{
        Name: "fidding",
    }
    test(any)
}

// value 允许为任意值
func test(value interface{}) {
    ...
}

但是,当我们以这样的形式传入函数中,在进行处理时我们需要区分interface类型(因为即便传入的 User结构体 ,interface本身也没有所谓的 Name 属性),此时就需要用到 type assertionstype switches ,来将其转换为我们需要的类型

举个栗子:

package main
import (
    "fmt"
)
type User struct{
    Name string
}
func main() {
    any := User{
        Name: "fidding",
    }
    test(any)
}
func test(value interface{}) {
    switch v := value.(type) {
        case string:
            fmt.Println(v)
        case int32, int64:
            fmt.Println(v)
        case User:
            // 可以看到op即为将interface转为User struct类型,并使用其Name对象
            op, ok := value.(User)
            fmt.Println(op.Name, ok)
        default:
            fmt.Println("unknown")
    }
}

执行输出结果为

fidding true

即我们可以对interface使用 .() 并在括号中传入想要解析的类型(如结构体),形如

// 如果转换失败ok=false,转换成功ok=true
res, ok := anyInterface.(someType)

并且我们并不确定interface类型时候,也可以使用 anyInterface.(type) 结合 switch case 来做判断。

现在再回过头看上面的栗子,是不是更清楚了呢

happy coding!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

失业的程序员

失业的程序员

沈逸 / 2014-5-1 / 39.00元

这是一个程序员从失业到自行创业的奋斗历程,虽然囧事连连、过程曲折,却充满了趣味。本书以作者的真实创业经历为主线,文字幽默诙谐,情节生动真实,包括了招聘、团队管理和用户公关,以及技术架构设计、核心代码编写、商务谈判、项目运作等场景经验。 从初期的创业伙伴、领路人,到商业竞争对手,各种复杂的关系在各个关键时刻却都发生了意想不到的逆转。在历经千辛万苦,眼看快要成功时,主人公却几乎再次失业。 ......一起来看看 《失业的程序员》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具