Golang - 将可变长度数组映射到结构

标签 go

我有一个结构如下:

type MyStruct struct {
   Part1 string
   Part2 string
   Part3 string
}

我有一个用斜杠分隔的字符串,我想映射到这个:

part1/part2/part3

但是,该字符串可能只包含 1 个部分,例如 part1 或两个部分,例如 part1/part2

如果缺少任何部分,它会被映射为一个空字符串。

我很新,所以想知道实现此目标的最佳方法是什么。通常我会拆分字符串并检查长度以了解该怎么做。在 go 中有没有更优雅的方法来做到这一点?

最佳答案

这是 peterSO 解决方案的一个版本,它使用包装器来帮助简化逻辑。

package main

import (
    "fmt"
    "strings"
)

type Wrap []string

func (w Wrap) Get(i int) string {
    if 0 <= i && i < len(w) {
        return w[i]
    }
    return ""
}

type MyStruct struct {
    Part1 string
    Part2 string
    Part3 string
}

func main() {
    str := "part1/part2/part3"
    split := Wrap(strings.Split(str, "/"))
    var parts MyStruct
    parts.Part1 = split.Get(0)
    parts.Part2 = split.Get(1)
    parts.Part3 = split.Get(2)
    fmt.Println(parts)

    str = "part1/part2"
    split = Wrap(strings.Split(str, "/"))
    parts = MyStruct{}
    parts.Part1 = split.Get(0)
    parts.Part2 = split.Get(1)
    parts.Part3 = split.Get(2)
    fmt.Println(parts)
}

关于Golang - 将可变长度数组映射到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17936456/

相关文章:

go - 找不到 attrmgr(来自 $GOROOT)和 $GOPATH?

asynchronous - 在golang中,如何编写一个为下一阶段引入延迟的流水线阶段?

json - Golang Json编码

go - 阻止来自 gorilla/mux 的打开 URL 重定向

go - Go 的方式是 PutUint32 还是直接使用 >> 运算符?

go - 将 markdown 转换为 pdf - 不可读的字体

google-app-engine - Google App Engine - ByteString 查询失败

go - 接口(interface)中的动态返回类型

go - 如何在 n--n 关系中避免 "import cycle"

google-app-engine - 带有 GoLang "permission denied"错误的 Oauth2 身份验证的 Google App Engine