golang中如何通过引用传递结构体类型的接口?

2024-02-28

我需要通过引用传递结构类型的接口,如下所示。由于我不能使用接口指针来构造类型变量,我应该如何更改以下代码来修改te价值10?.

package main

import (
    "fmt"
)

func another(te *interface{}) {
    *te = check{Val: 10}
}

func some(te *interface{}) {
    *te = check{Val: 20}
    another(te)
}

type check struct {
    Val int
}

func main() {
    a := check{Val: 100}
    p := &a
    fmt.Println(*p)
    some(p)
    fmt.Println(*p)
}

Thanks!

P.S 我读过,将指针传递给接口并不是一个很好的做法。请让我知道什么是更好的处理方法


那么您正在使用一个接口,并且您需要某种保证可以设置结构成员的值?听起来您应该将保证作为界面的一部分,例如:

type Settable interface {
    SetVal(val int)
}

func (c *check) SetVal(val int) {
    c.Val = val
}

func some(te Settable) {
    te.SetVal(20)
}

type check struct {
    Val int
}

func main() {
    a := check{Val: 100}
    p := &a
    some(p)
    fmt.Println(*p)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

golang中如何通过引用传递结构体类型的接口? 的相关文章

  • 解组转义 XML

    在 Go 中 我将如何解码此 XML 响应 我尝试过建立一个自定义UnMarshal方法在我的Answerstruct 但我运气不太好
  • GoLang ssh:尽管将其设置为 nil,但仍出现“必须指定 HosKeyCallback”错误

    我正在尝试使用 GoLang 连接到远程服务器 在客户端配置中 除了用户和密码之外 我将 HostKeyCallback 设置为 nil 以便它接受每个主机 config ssh ClientConfig User user HostKey
  • 在 Go 中初始化嵌入结构

    我有以下内容struct其中包含一个net http Request type MyRequest struct http Request PathParams map string string 现在我想初始化匿名内部结构http Req
  • C 中使用指针的结构冒泡排序

    我想使用 C 中的冒泡排序算法和指针对结构数组进行排序 我有一个汽车结构 typedef struct char model 30 int hp int price cars 我为 12 个项目分配内存 cars pointer cars
  • Cython:如何在结构中公开 void* 和函数指针?

    我有一个 C 标头 typedef struct
  • 如何将 int[] 转换为 uint8[]

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

    我正在尝试在 Go 中创建一个由大整数作为键的映射 effective Go 明确指出 结构体 数组和切片不能用作映射键 因为这些类型上没有定义相等性 这是有道理的 我当然可以将大整数转换为字符串并使用字符串作为键 但我在这里寻找更通用的解
  • 有队列实现吗?

    任何人都可以建议使用 Go 容器来实现简单快速的 FIF 队列 Go 有 3 种不同的容器 heap list and vector 哪一种更适合实现队列 事实上 如果您想要的是一个基本且易于使用的 fifo 队列 slice 可以满足您所
  • 指针和cstring长度

    我在这里设置指针 一个指向名称 另一个指向名称 但获取长度 怎么当我使用的时候cout lt lt strlen tail 它一直告诉我长度是3 即使我输入的是 12 include
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • Golang 正则表达式在字符串之间替换

    我有一些可能采用以下形式的字符串 MYSTRING MYSTRING n MYSTRING n MYSTRING randomstringwithvariablelength n 我希望能够将其正则表达式为MYSTRING foo 基本上替
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan
  • int (*) (int *) = 5(或任何整数值)的含义

    我无法弄清楚这一点 int main int int 5 return 0 上述作业使用 g c 11 进行编译 我知道int int 是一个指向接受一个函数的指针 int 作为参数并返回一个 int 但我不明白你如何将它等同于 5 起初我
  • 在 Go 中,如何将结构体转换为字节数组?

    我有一个我定义的结构实例 我想将其转换为字节数组 我尝试了 byte my struct 但这不起作用 另外 我还被指出二进制包 http golang org pkg encoding binary 但我不确定我应该使用哪个函数以及应该如
  • 多维数组 (C++)

    我正在尝试将指针存储在数组中 我指向类对象的指针是 classType ClassObject 所以我知道我可以使用 new 运算符来分配它 如下所示 ClassObject new classType 100 我正在阅读一个带有标点符号的
  • golang中通道缓冲容量0和1的区别

    我已将通道缓冲区大小设置为零 例如var intChannelZero make chan int 当从intChannelZero将被阻止 直到intChannelZero有价值 另外 我将通道缓冲区大小设置为 1 例如var intCh
  • Doxygen:记录函数指针类型的参数 (ANSI-C)

    我的代码需要一些函数指针类型 例如 brief Callback function type foo typedef int foo int a int b 我想记录函数参数的语义 但是 param in out 旁边的 brief声明似乎
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a

随机推荐