如何将结构体作为参数传递给函数?

2024-01-09

如何在 golang 中传递一个结构体作为参数?有我的代码:

package main

import (
    "fmt"
)

type MyClass struct {
    Name string
}

func test(class interface{}) {
    fmt.Println(class.Name)
}

func main() {

    test(MyClass{Name: "Jhon"})
}

当我运行它时,我收到这样的错误

# command-line-arguments
/tmp/sandbox290239038/main.go:12: class.Name undefined (type interface {} has no field or method Name)

有 play.golang.orgfiddle http://play.golang.org/p/do3YDFsyLD地址。


您正在寻找;

func test(class MyClass) {
    fmt.Println(class.Name)
}

就目前情况而言,该方法识别class作为实现空接口的某个对象(意味着在该范围内它的字段和方法完全未知),这就是您收到错误的原因。

你的另一个选择是这样的;

func test(class interface{}) {
     if c, ok := class.(MyClass); ok { // type assert on it    
         fmt.Println(c.Name)
     }
}

但在你的例子中没有理由这样做。仅当您要进行类型切换或有多个代码路径根据实际类型执行不同的操作时才有意义class.

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

如何将结构体作为参数传递给函数? 的相关文章

  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 为什么我不能将左大括号放在下一行?

    当我尝试编译以下代码时遇到奇怪的错误 package main import fmt fmt func main var arr 3 int for i 0 i lt 3 i fmt Printf d arr i 错误如下 unexpect
  • GOMAXPROCS 默认值是多少?

    不设置同名环境变量时是否保证GOMAXPROCS设置为1 此代码显示的值 package main import runtime fmt func getGOMAXPROCS int return runtime GOMAXPROCS 0
  • 如何将 int[] 转换为 uint8[]

    所以 我需要你的帮助 我找不到关于该主题的任何内容 Golang 是一门刚刚诞生的语言 所以对于像我这样的新手来说很难快速找到答案 预先声明的 Goint类型大小是特定于实现的 32 位或 64 位 数字类型 http golang org
  • 复杂数据类型作为 Go 中映射的键

    我正在尝试在 Go 中创建一个由大整数作为键的映射 effective Go 明确指出 结构体 数组和切片不能用作映射键 因为这些类型上没有定义相等性 这是有道理的 我当然可以将大整数转换为字符串并使用字符串作为键 但我在这里寻找更通用的解
  • 正确的文件扩展名或缩写是什么。 golang 的文本/模板?

    我正在考虑为其创建语法荧光笔 但我不知道这种特定类型模板的常规缩写 In 例子之一 http golang org pkg text template example Template helpers从文本 模板 godoc 中 它们引用
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan
  • 在 Gorilla Mux 中嵌套子路由器

    我一直在使用gorilla mux https github com gorilla mux满足我的路由需求 但我注意到一个问题 当我嵌套多个子路由器时它不起作用 这是示例 func main r mux NewRouter StrictS
  • 如何将接口转换为接口切片?

    我的输入是interface 而且我知道它可以是任何类型的数组 我想读取我输入的元素之一 所以我尝试将我的interface 进入一个 interface 但是 go 会给我以下错误 恐慌 接口转换 interface 是 map stri
  • 为什么 gmail API 以纯文本形式发送 html 电子邮件?

    我正在尝试使用 gmail API 发送 html 电子邮件 但由于某些原因 它会随机以纯文本 文本形式发送电子邮件 谷歌似乎改变了我设置的内容类型标头 这有什么理由吗 电子邮件内容始终完全相同 正如我测试的那样 API 仍处于实验阶段吗
  • golang中通道缓冲容量0和1的区别

    我已将通道缓冲区大小设置为零 例如var intChannelZero make chan int 当从intChannelZero将被阻止 直到intChannelZero有价值 另外 我将通道缓冲区大小设置为 1 例如var intCh
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • go json marshal 的默认大小写选项?

    我有以下结构要导出为 json type ExportedIncident struct Title string json title Host string json host Status string json status Dat
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 如何通过在切片上查找来从切片复制到数组

    我正在编写一个库来处理二进制格式 我有一个带有数组变量的结构 我想保留它以用于文档目的 我还需要从输入字节片中查找和判断 一些伪代码 type foo struct boo 5 byte coo 3 byte func main input
  • Go 指针 - 通过指针将值附加到切片

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

    我使用 ArangoDB Go 使用 go driver 并且需要实现多租户 这意味着每个客户都将在单独的数据库中拥有他的数据 我想要弄清楚的是如何使这种多租户发挥作用 我知道为每个请求创建一个新的数据库连接是不可持续的 这意味着我必须维护
  • 共享 GOPATH 的良好做法是什么?

    我刚刚开始学习 Go 并阅读现有代码以了解 其他人是如何做的 在这样做时 go 工作空间 的使用 特别是当它与项目的依赖项相关时 似乎无处不在 在处理各种 Go 项目时 使用单个或多个 Go 工作区 即 GOPATH 的定义 的常见最佳实践

随机推荐

  • NavigationLink 内的 tvOS 按钮不起作用

    我已经使用 swift 和 swiftui 构建了一个 iOS 应用程序 现在我正在开发该应用程序的 tvOS 版本 但是 我有几个问题 其中一个问题仍未解决 tvOS 文本字段透明背景 https stackoverflow com qu
  • 是否可以等到所有 javascript 文件加载完毕后再执行 javascript 代码?

    我们有几个 JavaScript 文件 我们在母版页的底部加载它们 但是 我遇到的情况是 我需要在加载其他脚本之前执行一些 JavaScript 是否可以等到所有 JavaScript 文件加载完毕后再执行一些 JavaScript 代码
  • 从 SCM 检出 Maven 项目 - 无连接器

    我在 Eclipse Indigo 中签出 Maven 项目时遇到问题 我已经安装了 m2e 插件 Subclipse Git 但无法选择合适的 SCM 类型 如何解决这个问题 阿凡是对的 连接器仍然在 Indigo 中 只是隐藏了一点 启
  • MotionLayout:同一视图上的 OnSwipe 和 OnClick

    我正在为我的页面使用 MotionLayout 我有两种状态 可以通过视图的 OnSwipe 进行切换
  • 从 Finalizer 调用托管资源是否安全? (如果我检查空)

    打电话不安全吗 组件 Dispose 如果我检查空 如果我将代码更改为 MyResource Dispose public void Dispose Check to see if Dispose has already been call
  • 错误:服务“xxx”使用未定义的网络“xxx”

    它一直对我说网络是不明确的 错误 服务frontend network使用未定义的网络frontend network 然而 我看到已经有这样一个网络 docker网络ls 我错过了什么 我需要你的帮助 我在谷歌上读了很多相关内容 但找不到
  • Google表格查询非连续范围

    是否可以编写一个引用非相邻 不连续 不连续 我不知道正确的短语 范围的查询 在公式内 例如 query A2 C E2 F 选择 Col2 其中 Col5 3 我希望能够将查询放在 D 列中 因此我想分割它周围的范围 如果我只是说 Quer
  • 在Python中迭代多个列表中值的所有组合[重复]

    这个问题在这里已经有答案了 给定多个可能不同长度的列表 我想迭代所有值的组合 每个列表中的一项 例如 first 1 5 8 second 0 5 4 然后我希望的输出是 combined 1 0 5 1 4 5 0 5 5 4 8 0 5
  • Dapper:单元测试 SQL 查询

    我从 Dapper 微型 ORM 开始 我使用 Dapper Rainbow 我想测试查询和它们检索的数据 我的意思是 例如 我有用户服务用方法GetAll 并且我想测试 sql 查询是否从某个列表中检索所有用户 不是从数据库中检索 因为我
  • 对象传播与 Object.assign

    假设我有一个options变量 我想设置一些默认值 这两种选择的优点 缺点是什么 使用对象传播 options optionsDefault options 或者使用 Object assign options Object assign
  • Android 中的捕获按钮释放

    是否可以像我们捕获单击一样捕获按钮的释放onClickListener and OnClick 我想在按下按钮时增加按钮的大小 并在释放单击时将其移回原始大小 谁能帮我怎么做 您应该在按钮上设置一个 OnTouchListener butt
  • 显示另一个 DialogFragment 中的 DialogFragment

    我有一个DialogFragment向用户显示选项列表 其中一个选项是 删除 选项 当用户按下删除选项时 我想显示另一个 DialogFragment 作为确认 不幸的是 确认对话框不显示 这是我的代码 第一个片段代码 public cla
  • 使用 Microsoft Graph 客户端库访问 user.MemberOf

    Note 我最初提出这个问题 https github com microsoftgraph msgraph sdk dotnet issues 66在客户端库存储库中 他们回复说这是服务库中的问题 而不是 NET 库中的问题 在开发过程中
  • Ruby on Rails:“无法加载此类文件”eventmachine

    我正在尝试在我的 Windows 计算机上运行 RoR 应用程序 我在配置所有内容方面取得了很大进展 但我被困在这里 当我尝试运行 rake 时 出现以下错误 C inetpub wwwroot voterApp gt rails serv
  • 使用 C# 进行调查的进度条[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我使用 C 在 ASP NET 中做
  • Node.js 卷曲与 http.request

    我需要向另一台服务器发送 http 请求 我可以通过两种方式做到这一点 1 使用http request 2 使用child process exec define timeout data url var exec require chi
  • 正则表达式:选择除 img 标签之外的所有内容

    我正在尝试使用正则表达式选择一些文本 留下所有文本img标签完好无损 我发现以下代码选择了所有img tags
  • 如何修改子图位置以阻止它们相互覆盖?

    我正在尝试创建世界地图的子图 6 个图 并在其中写入选定的形状文件 我的问题在于我对子图的放置 它们互相覆盖 我从 stackoverflow 上的其他问题中了解到 这是因为轴以某种方式重叠 但我认为我创建的位置只是 并排 参见下面的代码
  • 奇怪的 Ruby 语法?

    我正在 ruby lang org 上做 Ruby 20 分钟教程 我发现这段代码与 irb 混淆 irb main 015 0 gt def h name irb main 016 1 gt puts Hello name irb mai
  • 如何将结构体作为参数传递给函数?

    如何在 golang 中传递一个结构体作为参数 有我的代码 package main import fmt type MyClass struct Name string func test class interface fmt Prin