GO语言篇之反射

这篇具有很好参考价值的文章主要介绍了GO语言篇之反射。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

GO语言篇之反射

前言

Go语言可以在运行期间查看自身结构,在运行时动态地获取结构体的信息,如字段类型,字段数量,方法列表等,动态调用方法

获取变量类型

var num int
reflect.TypeOf(num)

获取变量值

var s = "hello reflect"
reflect.ValueOf(s)

获取结构体的字段,方法,动态地修改,调用结构体的字段和方法

type Cat struct {
    Name string
    Age int
}

func (c Cat) Hi(name string) string {
    return "你好" + name
}

cat := Cat{Name: "汤姆", Age: 10}
val := reflect.ValueOf(&cat).Elem()
val.FieldByName("Name").SetString("小猫咪")
val.FieldByName("Age").SetInt(12)
args := []reflect.Value{reflect.ValueOf("大黄")}
result := val.MethodByName("Hi").Call(args)
fmt.Println(result[0].String())

创建变量

reflect.MakeSlice(reflect.TypeOf([]string(nil)), 0, 3)

reflect.MakeChan(reflect.TypeOf((chan int)(nil)), 3)

reflect.MakeMap(reflect.TypeOf(map[string]int(nil)))

reflect.MakeMapWithSize(reflect.TypeOf(map[string]int(nil)), 3)

reflect.MakeFunc(reflect.TypeOf(func(a, b int) int {
    return a + b
}), func(args []reflect.Value) (results []reflect.Value) {
    return []reflect.Value{reflect.ValueOf(args[0].Int() * args[1].Int())}
})

缺点

反射可能会降低性能,因为反射需要运行时动态地获取类型信息,因此需要在使用的过程中权衡利弊文章来源地址https://www.toymoban.com/news/detail-708883.html

到了这里,关于GO语言篇之反射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go语言反射

    #反射reflect 先看官方Doc中Rob Pike给出的关于反射的定义: 维基百科中的定义: 不同语言的反射模型不尽相同,有些语言还不支持反射。《Go 语言圣经》中是这样定义反射的: Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道

    2024年02月12日
    浏览(36)
  • GO语言篇之发布开源软件包

    我们写GO语言程序的时候难免会引用第三方的软件包,那么你知道别人是怎么发布自己的软件包吗,别急,这篇博客教你怎么做 至此,少年你已经发布了第一个属于自己的GO语言开源软件包

    2024年02月09日
    浏览(51)
  • go语言的反射和泛型

    反射可以在程序的运行时获取变量的各种信息。Go语言中光反射在 reflect 包下。 http://c.biancheng.net/view/4407.html Go语言中通过 断言 转化为指定类型。 但是这并不具有通用性,通过断言的判断必须是已有定义的类型,未定义的就不可用,因此没有通用性。泛型就是来解决这一问题

    2024年02月10日
    浏览(44)
  • Go语言通过反射获取各种类型变量的值

    反射是程序在运行期间获取变量的类型和值、或者执行变量的方法的能力。 反射是程序在运行期间获取变量的类型和值、或者执行变量的方法的能力。 Golang 反射包中有两对非常重要的函数和类型,两个函数分别是: reflect.TypeOf 能获取类型信息 reflect.Type; reflect.ValueOf 能获取

    2024年02月15日
    浏览(51)
  • Go后端开发 -- 反射reflect && 结构体标签

    在计算机科学领域,反射是指一类应用,它们 能够自描述和自控制 。也就是说, 这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射

    2024年01月22日
    浏览(49)
  • Golang:Go语言结构

    在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 表达式 注释 接下来让我们来看下简单的代码,该代码输出了\\\"Hello World!\\\": 让我们来看下以上程序的各个部分: 第一

    2024年02月10日
    浏览(57)
  • 【Golang】三分钟让你快速了解Go语言&为什么我们需要Go语言?

    博主简介: 努力学习的大一在校计算机专业学生,热爱学习和创作。目前在学习和分享:数据结构、Go,Java等相关知识。 博主主页: @是瑶瑶子啦 所属专栏: Go语言核心编程 近期目标: 写好专栏的每一篇文章 Go 语言从 2009 年 9 月 21 日开始作为谷歌公司 20% 兼职项目,即相关

    2023年04月21日
    浏览(59)
  • 【GoLang】MAC安装Go语言环境

    小试牛刀 首先安装VScode软件 或者pycharm mac安装brew软件  brew install go 报了一个错误 不提供这个支持  重新brew install go 之后又重新brew reinstall go 使用go version 可以看到go 的版本 使用go env  可以看到go安装后的配置 配置一个环境变量 vim ~/.zshrc,  

    2024年02月15日
    浏览(56)
  • Go语言(Golang)数据库编程

    要想连接到 SQL 数据库,首先需要加载目标数据库的驱动,驱动里面包含着于该数据库交互的逻辑。 sql.Open() 数据库驱动的名称 数据源名称 得到一个指向 sql.DB 这个 struct 的指针 sql.DB 是用来操作数据库的,它代表了0个或者多个底层连接的池,这些连接由sql 包来维护,sql 包会

    2024年02月03日
    浏览(86)
  • 【Golang】VScode配置Go语言环境

    安装VScode请参考我的上一篇博客:VScode安装_㫪548的博客-CSDN博客 接下来我们直接进入正题: Go语言(又称Golang)是一种开源的编程语言,由Google开发并于2009年首次发布。Go语言具有简洁、高效、可靠和易于阅读的特点,被设计用于解决大型项目的开发需求。它结合了静态类型

    2024年02月03日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包