我不能改变这个结构,我也不明白为什么

马丁:

考虑以下链接的要点

码:

package main

import (
    "fmt"
)

type StateTransition struct {
    msg Message
}

type Message interface {
    To() *string
}

type Transaction struct {
    data txdata
}

type txdata struct {
    Recipient *string
}

func (t Transaction) To() (*string) {
    return t.data.Recipient
}


func UnMask(n **string, k string) {
    *n = &k
} 

func main() {
    toField := "Bob"
    toPtr := &toField
    txd := txdata{toPtr}
    tx := Transaction{txd}
    st := StateTransition{tx}
    n1 := st.msg.To()
    fmt.Printf("Hello, %s \n", *n1)
    UnMask(&n1, "Joe")
    fmt.Printf("Hello, %s \n", *n1)
    n2 := st.msg.To()
    fmt.Printf("Hello, %s \n", *n2)
}

输出量

Hello, Bob 
Hello, Joe 
Hello, Bob 

预期产量

Hello, Bob
Hello, Joe
Hello, Joe

结果是打印了序列“鲍勃,乔,鲍勃”,而我的直觉说应该是“鲍勃,乔,乔”(这也是我打印的内容)。可以使用go的人可以向我解释一下如何组合与该问题相关的指针,结构和接口,从而使我对我为什么出错以及如何解决它有所了解吗?

mkopriva:

Unmask将一个指针指向一个指针,假设X指向Y指针,Y指向字符串值。然后,取消屏蔽会更改 X指向的指针,Y不变,并且仍指向相同的旧字符串。

你可以这样做:

func UnMask(n **string, k string) {
    **n = k
}

要么

func UnMask(n *string, k string) {
    *n = k
}
// ....
UnMask(n1, "Joe") // drop the '&'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

这个Xaml无效...我不明白为什么

我不明白为什么会给出这个输出?

不明白为什么我不能调用函数

不明白为什么我不能释放数组

我不明白为什么这段代码不能运行?

java.lang.Long 不能转换为 clojure.lang.IFn 我不明白为什么我收到这个

我不明白为什么编译

我编译了这个看似不正确的代码,但我不明白为什么

我不明白为什么编译器会给我这个代码错误

为什么我的代码连续打印两次?我不明白这个问题

我有这个错误:无法读取null的属性“值”,我不明白为什么

我不明白为什么我的代码中出现这个未定义的错误

我知道这个程序的答案,但我不明白为什么?

我不明白为什么我会收到这个错误:[...] 有多个参数值 [...]

我不明白为什么我的代码可用于结构体数组,但不能用于包含此结构体数组的结构体?

我不明白这个JSON有什么问题

我不明白为什么这个解决方案有效。(整数溢出)

我不明白为什么这个查询不起作用

我不明白为什么这个 Array 不起作用?

我不明白为什么这个@selector无法正常工作

我不明白为什么这个正则表达式总是返回false?

不明白为什么我在使用 image_picker 时遇到这个错误

我不明白为什么在这个 Java 问题中变量 result 的值是非零的

我不明白为什么在这个给定的程序中 a 的值没有增加

我不明白为什么我的波形是这样出来的

我不明白为什么我的团队失败了

我有分段错误,我不明白为什么

我不明白为什么我的 super() 产生错误

我不明白这个结果