新的匿名结构指针

发布于 2025-01-17 23:42:17 字数 463 浏览 2 评论 0原文

我是 Go 新手,定义单独的类型结构不如将结构一个一个地放在另一个结构中漂亮,如果我有这样的结构

var out outter
type outter struct {
    a int
    b string
    ...
    s map[string]*struct{
        sa int
        sb string
        ...
    }
}

,那么我可以访问 s 映射以使用简单的 out 进行读取。 s["abc"].sa ...如果我只能以某种方式将值插入到这样的匿名结构中。所以我的问题是如何在我的函数中的某个位置的地图 s 中插入新值。

out.s["abc"] = new( typeof(*out.s[""]) ) // something like that

I am new to Go, and defining separate type structs is less pretty than having structs one inside other, and if i have struct like this

var out outter
type outter struct {
    a int
    b string
    ...
    s map[string]*struct{
        sa int
        sb string
        ...
    }
}

Then I could access s map for reading with simple out.s["abc"].sa ... if I could only somehow insert values to such anonymous struct. So my question is how to insert new values in map s somewhere in my functions.

out.s["abc"] = new( typeof(*out.s[""]) ) // something like that

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

瑾兮 2025-01-24 23:42:17

使用匿名结构,分配很乏味,但并不困难:(

out.s = make(map[string]*struct {
    sa int
    sb string
})
out.s["abc"] = &struct {
    sa int
    sb string
}{
    sa: 1,
    sb: "hello",
}

https://go.dev/ play/p/p/hvu_tqteq6q )。

正如@jimb指出的那样,如果您命名struct:

type outter struct {
    a int
    b string
    s map[string]*inner
}

type inner struct {
    sa int
    sb string
}

在这种情况下,这会变得容易得多(在这种情况下,您可以写

out.s = make(map[string]*inner)
out.s["abc"] = &inner{
    sa: 1,
    sb: "hello",
}

https://go.dev/play/p/65ywniobsbm )。

With the anonymous struct the allocations are tedious but not difficult:

out.s = make(map[string]*struct {
    sa int
    sb string
})
out.s["abc"] = &struct {
    sa int
    sb string
}{
    sa: 1,
    sb: "hello",
}

(full code at https://go.dev/play/p/HVU_tQtEQ6Q).

As @JimB pointed out, this gets much easier, if you name the struct:

type outter struct {
    a int
    b string
    s map[string]*inner
}

type inner struct {
    sa int
    sb string
}

In this case you can write

out.s = make(map[string]*inner)
out.s["abc"] = &inner{
    sa: 1,
    sb: "hello",
}

(code at https://go.dev/play/p/65yWNioBSBm).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文