英文:
Print looped int as a string
问题
我有一个自定义类型,循环显示给定的所有字段。这样做的目的是为了能够比一个长长的单行更好地格式化它。然而,在循环内部打印它不起作用,我尝试过的所有方法都只是打印出一个单行的字符串,而不是数组中的所有4个字段。
type Rule struct {
Value string `json:"value"`
Tag string `json:"tag"`
Id string `json:"id"`
}
func test() string {
get, err := getRules()
if err != nil {
panic(err)
}
for _, r := range get {
fmt.Printf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
}
// 需要将它作为字符串返回,如下所示
return fmt.Sprintf("%v", list)
}
有没有一种简单的方法可以创建一个名为list
的变量?这样我就可以将它显示为一个字符串了。打印出来的结果应该是:
value:x0, tag:t0, id:i0
value:x1, tag:t1, id:i1
value:x2, tag:t2, id:i2
value:x3, tag:t3, id:i3
从fmt.Printf(get)
得到的结果是:
[{x0 t0 i0} {x1 t1 i1} {x2 t2 i2} {x3 t3 i3}]
我实际上是想将一个自定义类型转换为字符串,以便能够更好地显示它。
英文:
I have a custom type looped to display all of the fields given. The purpose of this is to be able to format it a little better than a long, endless single line. However, printing it within the loop won't work, everything I've tried simply prints a string of a single line versus all 4 from the array.
type Rule struct {
Value string `json:"value"`
Tag string `json:"tag"`
Id string `json:"id"`
}
func test() string {
get, err := getRules()
if err != nil {
panic(err)
}
for _, r := range get {
fmt.Printf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
}
// need to return it as a string like below
return fmt.Sprintf("%v", list)
}
is there a way to easily create a variable list
out of that? So I can display it as a string? That prints:
value:x0, tag:t0, id:i0
value:x1, tag:t1, id:i1
value:x2, tag:t2, id:i2
value:x3, tag:t3, id:i3
from fmt.Printf(get)
[{x0 t0 i0} {x1 t1 i1} {x2 t2 i2} {x3 t3 i3}]
I'm essentially trying to convert a custom type to a string so that I can display it better.
答案1
得分: 2
你应该实现String
方法。
package main
import (
"fmt"
"strings"
)
type Rule struct {
Value string `json:"value"`
Tag string `json:"tag"`
Id string `json:"id"`
}
func (g *Rule) String() string {
return fmt.Sprintf("value:%s, tag:%s id:%s\n", g.Value, g.Tag, g.Id)
}
type RuleList []Rule
func (g RuleList) String() string {
slist := make([]string, 0)
for _, v := range g {
slist = append(slist, v.String())
}
return strings.Join(slist, "")
}
func main() {
g1 := Rule{Value: "hello", Tag: "1", Id: "1"}
g2 := Rule{Value: "hello", Tag: "1", Id: "1"}
g3 := Rule{Value: "hello", Tag: "1", Id: "1"}
glist := RuleList{g1, g2, g3}
fmt.Println(glist)
}
英文:
You should implement String
method.
package main
import (
"fmt"
"strings"
)
type Rule struct {
Value string `json:"value"`
Tag string `json:"tag"`
Id string `json:"id"`
}
func (g *Rule) String() string {
return fmt.Sprintf("value:%s, tag:%s id:%s\n", g.Value, g.Tag, g.Id)
}
type RuleList []Rule
func (g RuleList) String() string {
slist := make([]string, 0)
for _, v := range g {
slist = append(slist, v.String())
}
return strings.Join(slist, "")
}
func main() {
g1 := Rule{Value: "hello", Tag: "1", Id: "1"}
g2 := Rule{Value: "hello", Tag: "1", Id: "1"}
g3 := Rule{Value: "hello", Tag: "1", Id: "1"}
glist := RuleList{g1, g2, g3}
fmt.Println(glist)
}
答案2
得分: 0
你可以通过实现Stringer接口来实现这一点。以下是代码的翻译部分:
package main
import "fmt"
type Dummy struct{
Value, Tag, Id string
}
func (r Dummy) String() string {
return fmt.Sprintf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
}
func main(){
ls := make([]Dummy,0)
ls = append(ls, Dummy{"x0", "t0", "i0"})
ls = append(ls, Dummy{"x1", "t1", "i1"})
ls = append(ls, Dummy{"x2", "t2", "i2"})
ls = append(ls, Dummy{"x3", "t3", "i3"})
fmt.Println(Dummy{"x0", "t0", "i0"})
fmt.Println(ls)
}
你可以在这个链接中了解更多关于Stringer接口的信息:Stringers
英文:
You can achieve this by implementing Stringers interface [more about Stringers]
package main
import "fmt"
type Dummy struct{
Value, Tag, Id string
}
func (r Dummy) String() string {
return fmt.Sprintf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
}
func main(){
ls := make([]Dummy,0)
ls = append(ls, Dummy{"x0", "t0", "i0"})
ls = append(ls, Dummy{"x1", "t1", "i1"})
ls = append(ls, Dummy{"x2", "t2", "i2"})
ls = append(ls, Dummy{"x3", "t3", "i3"})
fmt.Println(Dummy{"x0", "t0", "i0"})
fmt.Println(ls)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论