反射类型没有方法

2023-12-02

我正在尝试在 Go 中使用反射。为什么这段代码没有列出方法?它列出了字段。

这是问题所在吗?value interface{}我不确定如何将通用结构/类/类型传递给函数。通常我只会传递一个对象。

(我对此完全陌生。我是一名 C# 程序员)

package main

import (
"fmt"
"reflect"
)

func main() {
    var B TestType = TestType{TestString: "Hello", TestNumber: 3}
    ListMethods(B)
}

func ListMethods(value interface{}) {

    fooType := reflect.TypeOf(value)

    for i := 0; i < fooType.NumMethod(); i++ {
        method := fooType.Method(i)
        fmt.Println("Method = " + method.Name)
    }

    for i := 0; i < fooType.NumField(); i++ {
        field := fooType.Field(i)
        fmt.Println("Field = " + field.Name)
        fmt.Println(reflect.ValueOf(value).Field(i))
    }
}

type TestType struct {
    TestString string
    TestNumber int
}

func (this *TestType) TestFunction() {
    fmt.Println("Test")
}

因为您正在传递一个类型,并且您声明了一个指向该类型指针的方法。

https://play.golang.org/p/B0NdVyxGxt

看看这个从你的例子扩展而来的例子:

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var B TestType = TestType{TestString: "Hello", TestNumber: 3}
    ListMethods(B)
}

func ListMethods(value interface{}) {

    fooType := reflect.TypeOf(value)
    ptrFooType := reflect.PtrTo(fooType)

    for i := 0; i < fooType.NumMethod(); i++ {
        method := fooType.Method(i)
        fmt.Println("Method = " + method.Name)
    }

    for i := 0; i < ptrFooType.NumMethod(); i++ {
        method := ptrFooType.Method(i)
        fmt.Println("* Method = " + method.Name)
    }

    for i := 0; i < fooType.NumField(); i++ {
        field := fooType.Field(i)
        fmt.Println("Field = " + field.Name)
        fmt.Println(reflect.ValueOf(value).Field(i))
    }
}

type TestType struct {
    TestString string
    TestNumber int
}

func (this *TestType) TestFunctionPtr() {
    fmt.Println("Test")
}

func (this TestType) TestFunction() {
    fmt.Println("Test Non Ptr")
}

请注意如何*Type还可以访问Type方法。但Type无法访问*Type方法。

转换自Type to *Type我已经用过reflect.PtrTo(Type).

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

反射类型没有方法 的相关文章

  • Facebook服务器端登录、CORS

    我正在实现一个带有 FB 服务器端登录的网站 简化步骤如下 一个简单的按钮触发 JS 脚本 该脚本调用我的后端 APIhttps localhost fblogin function sendFbLoginData get https lo
  • 在java中是否可以使用反射创建没有无参数构造函数的“空白”类实例?

    我有一个没有默认构造函数的类 我需要一种方法来获取此类的 空白 实例 空白 意味着实例化后所有类字段都应具有默认值 如 null 0 等 我问这个问题是因为我需要能够序列化 反序列化大对象树 而且我无法访问该对象类的源 并且类既没有默认构造
  • 指针上定义的方法仍然可以用值调用

    Effective Go 文档说明如下 关于接收者的指针与值的规则是 可以在指针和值上调用值方法 但只能在指针上调用指针方法 http tip golang org doc effective go html pointers vs val
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • 将中间件与 Golang Gorilla mux 子路由器结合使用

    如何将中间件应用到 Go 中大猩猩工具包 http www gorillatoolkit org 多路复用器子路由器 我有以下代码 router mux NewRouter StrictSlash true apiRouter router
  • 如何将长 Go 模板函数拆分为多行?

    我有一个很长的printf调用 Go 模板 例子 printf mongodb s s s s authSource admin replicaSet s readPreference nearest w majority Values r
  • 所有可能的 GOOS 价值?

    如果我做对了 GOOS在编译源代码时确定 为了更好地支持多个操作系统 我感兴趣的是GOOS可能 当然 Go 是开源的 所以它可能有无限的可能性 所以我真正想要的是一个 通用列表 已知值为 windows linux darwin or fr
  • 调用方法参见java注解

    假设我有这样的情况 public String method String s return stringForThisVisibility s EnumVisibility PUBLIC 我想用这样的注释替换它 VisibilityLev
  • 如何构建一个不链接到 musl libc 的 go 可执行文件

    So 官方的 Go 构建容器基于 Alpine 高山用途musl https www musl libc org 作为 libc 而不是 glibc 我需要在容器中构建一个可以在使用 glibc 的 Ubuntu 上运行的 Go 可执行文件
  • Java“非法访问操作”方法将被弃用? [复制]

    这个问题在这里已经有答案了 JDK 9 JVM 发出非法访问操作警告后 如果您使用一些非法访问 例如setAccessible 我的问题 Is setAccessible 以后会被封吗 此功能的官方参考 如果将被弃用 在哪里 我在任何地方都
  • Go 指针 - 通过指针将值附加到切片

    我有一个 struct ProductData 及其实例 p 它有一个切片属性 type ProductInfo struct TopAttributes map string interface 我想设置 TopAttributes 如下
  • 管理多租户 ArangoDB 连接

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • 使用生成的 Golang DLL 返回字符串或 *C.Char

    我一直在努力追随z505 goDLL https github com z505 goDLL回购并遇到了一个大问题 该方法无法返回字符串 我无法读取结果的输出变量 这是我到目前为止使用的代码 Go 完整代码https play golang
  • []interface{}{} 中的双大括号是什么意思

    请注意 这是格式为 的双花括号 而不是嵌套花括号 我也不确定这是空接口问题 切片问题还是结构问题 我猜它至少是其中两个的组合 我正在学习 Golang 并且已经达到了空接口 我发现我需要将空接口声明为 interface 或者例如 inte
  • 创建 DirectoryEntry 实例以供测试使用

    我正在尝试创建 DirectoryEntry 的实例 以便可以使用它来测试将传递 DirectoryEntry 的一些代码 然而 尽管进行了很多尝试 我还是找不到实例化 DE 并初始化它的 PropertyCollection 的方法 我有
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 递归读取任何 java 对象并将复杂类型提取到哈希映射中

    我需要编写一个实用程序 它接受空白 HashMap 和任何对象作为参数并返回 HashMap public HashMap returnMap HashMap map Object parseThisObject logic to stri
  • 使对象在运行时不可变 [C#]

    有什么方法 我希望利用反射 可以使实例化对象不可变及其所有公共财产 我有一个来自其他人的代码库 没有可用源 的类 我需要使用它 并且我基本上希望在实例化该类后 如果任何地方的任何代码段尝试调用该类中的公共设置器 则抛出异常 注意 我不想在类
  • 从 GUID 获取类型

    由于种种原因 我需要在C 中实现类型缓存机制 幸运的是 CLR 提供了Type GUID来唯一标识一个类型 不幸的是 我找不到任何方法来根据此 GUID 查找类型 有Type GetTypeFromCLSID 但根据我对文档 和实验 的理解
  • 在 Golang 中生成固定长度的随机十六进制字符串的有效方法?

    我需要生成很多固定长度的随机十六进制字符串 我找到这个解决方案golang中如何生成固定长度的随机字符串 https stackoverflow com a 31832326 710955 我正在做这样的事情 const letterByt

随机推荐

  • SWIFT:为什么“NSURL(string:”返回 Nil,即使它是浏览器中的有效 URL?

    前两个示例链接有效 第三个链接返回 NIL 为什么 NSUrl 对于这样的字符串返回 nil 即使它在浏览器中是有效的 url 我应该更多地处理字符串吗 这是我的代码 import UIKit import Foundation class
  • vfptr 中的 Visual C++ 方法按相反顺序排列

    有没有办法控制 vfptr 中某些类方法的顺序 看来Visual C 2010至少将方法指针按照声明顺序排列 重载方法除外 下面是示例代码 enum ENUM class CLASS virtual void foo1 virtual CL
  • 在 AngularJs 中共享数据

    如何将数据共享给所有控制器 我有一个控制器 可以从服务器 file json 中提取数据 我想将其共享给其他控制器 sampleApp controller PhoneListCtrl scope http function scope h
  • iPhone:时间剖面仪

    有没有好的教程或描述如何使用时间剖面仪 我发现的只是http blancer com tutorials flex 78335 apple profiling tools shark is out instruments is in and
  • 单词中不同的字母颜色[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 有没有什么解决方案可以结合html css和js来一一改变单词的字母颜色 某种简单的方法 我是js新手 是的 有 而且也很受欢迎 http lettingjs com 怎么运行的
  • 即使设置了哈希密码格式,ASP.Net 会员也会将更改后的密码保存为纯文本

    我正在使用 ASP Net SqlMembershipProvider 来管理我的用户 这是我的配置
  • python多线程比串行慢?

    我正在尝试找出Python 中的多线程编程 这是我想要比较串行和并行速度的简单任务 import threading import Queue import time import math def sinFunc offset n res
  • Excel Interop - 如何更改命名范围

    我有一个 Excel 模板文件 我从 SQL Server OLEDB 连接器将数据填充到其中 该文件包含一些引用数据库填充的数据集的数据透视表 目前我所做的是使用 Data A K 范围选择工作表中的所有行 这会带来数据透视表中显示空白值
  • 使用 jQuery 使用数据属性对元素进行排序

    只是想让你知道 我是一个菜鸟 我尝试为我的网站上的菜单导航编写特定功能 http thomasmedicus at 我希望我网站上的访问者能够按 日期 或 相关性 对我的项目进行排序 我创建了这张图片 以便您可以更好地了解我 preview
  • 在 Excel 2013 中使用宏设置打印区域

    在 Excel 2013 中 工作表名为 Tags 我在尝试着设置打印区域 from A2直到页尾 以列结束L Worksheets Tags PageSetup PrintArea Worksheets Tags Range Cells
  • 为什么我的模型预测相同的标签?

    我正在训练一个小型网络 训练似乎进展顺利 val 损失减少 验证准确度达到 80 左右 一旦没有更多改进 它实际上会停止训练 耐心 10 它训练了 40 个 epoch 然而 它只为每个测试图像预测一个类别 我尝试随机初始化转换层 我添加了
  • C# 正则表达式用于匹配嵌套括号内的特定文本

    我有这些代码行用于括号之间的运算符 string filtered Regex Replace input string Empty var result filtered Split new StringSplitOptions Remo
  • 逗号分隔值到单引号和逗号分隔值

    我的数据为 abc defg hijklm op qrs tuv 我希望将这些数据转换为 abc defg hijklm op qrs tuv 我想在linux下做 我使用 sed 我一直在互联网上查找 但没有找到解决方案 请帮我 在开头添
  • 核心数据不保存我的数据

    我使用核心数据来保存一些整数 速率 然后在上下文中调用 save HeartRateBeat beat HeartRateBeat heartRateWithHeartRate rate ofRecordTitle self recordT
  • 使用 Django 实现单点登录 (SSO) [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想使用 Django 为我们当前使用的多个应用程序实现单点登录 SSO 我如何使用 Django 来实现这个 我们正在使用 OpenAM http
  • 将 QWidget 渲染为 QImage 丢失 alpha 通道

    我有一个简单的 Qt 小部件 它是QLabel应用了简单的 CSS 样式 样式的重要部分是圆形边框 QString css border style solid border width 3px border radius 7px 它在屏幕
  • 反应js;映射数组后没有任何渲染

    我有一个输入 在用户插入文本后我想在按钮中显示每个单词button group 我拆分了句子并映射了返回的内容
  • 我应该使用哪种 java swing 布局

    我需要创建这个框架 我应该使用哪种布局 我正在考虑框或网格布局 但右侧的菜单将是一个问题 您的代码中有很多重复 我会分解每个部分 使其成为一个单独的组件 并专注于其单独的布局需求 主屏幕有 4 个主要区域 不包括菜单 我会用类似的东西Gri
  • 如何防止Mysql Connector/J转换DATE和TIME时区?

    我正在使用以下 DSN 连接到 mysql 服务器 jdbc mysql localhost my database useUnicode true characterEncoding utf 8 serverTimezone UTC 我遇
  • 反射类型没有方法

    我正在尝试在 Go 中使用反射 为什么这段代码没有列出方法 它列出了字段 这是问题所在吗 value interface 我不确定如何将通用结构 类 类型传递给函数 通常我只会传递一个对象 我对此完全陌生 我是一名 C 程序员 packag