将循环的整数打印为字符串。

huangapple go评论113阅读模式
英文:

Print looped int as a string

问题

我有一个自定义类型,循环显示给定的所有字段。这样做的目的是为了能够比一个长长的单行更好地格式化它。然而,在循环内部打印它不起作用,我尝试过的所有方法都只是打印出一个单行的字符串,而不是数组中的所有4个字段。

  1. type Rule struct {
  2. Value string `json:"value"`
  3. Tag string `json:"tag"`
  4. Id string `json:"id"`
  5. }
  6. func test() string {
  7. get, err := getRules()
  8. if err != nil {
  9. panic(err)
  10. }
  11. for _, r := range get {
  12. fmt.Printf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
  13. }
  14. // 需要将它作为字符串返回,如下所示
  15. return fmt.Sprintf("%v", list)
  16. }

有没有一种简单的方法可以创建一个名为list的变量?这样我就可以将它显示为一个字符串了。打印出来的结果应该是:

  1. value:x0, tag:t0, id:i0
  2. value:x1, tag:t1, id:i1
  3. value:x2, tag:t2, id:i2
  4. value:x3, tag:t3, id:i3

fmt.Printf(get)得到的结果是:

  1. [{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.

  1. type Rule struct {
  2. Value string `json:"value"`
  3. Tag string `json:"tag"`
  4. Id string `json:"id"`
  5. }
  6. func test() string {
  7. get, err := getRules()
  8. if err != nil {
  9. panic(err)
  10. }
  11. for _, r := range get {
  12. fmt.Printf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
  13. }
  14. // need to return it as a string like below
  15. return fmt.Sprintf("%v", list)
  16. }

is there a way to easily create a variable list out of that? So I can display it as a string? That prints:

  1. value:x0, tag:t0, id:i0
  2. value:x1, tag:t1, id:i1
  3. value:x2, tag:t2, id:i2
  4. value:x3, tag:t3, id:i3

from fmt.Printf(get)

  1. [{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方法。

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type Rule struct {
  7. Value string `json:"value"`
  8. Tag string `json:"tag"`
  9. Id string `json:"id"`
  10. }
  11. func (g *Rule) String() string {
  12. return fmt.Sprintf("value:%s, tag:%s id:%s\n", g.Value, g.Tag, g.Id)
  13. }
  14. type RuleList []Rule
  15. func (g RuleList) String() string {
  16. slist := make([]string, 0)
  17. for _, v := range g {
  18. slist = append(slist, v.String())
  19. }
  20. return strings.Join(slist, "")
  21. }
  22. func main() {
  23. g1 := Rule{Value: "hello", Tag: "1", Id: "1"}
  24. g2 := Rule{Value: "hello", Tag: "1", Id: "1"}
  25. g3 := Rule{Value: "hello", Tag: "1", Id: "1"}
  26. glist := RuleList{g1, g2, g3}
  27. fmt.Println(glist)
  28. }
英文:

You should implement String method.

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. type Rule struct {
  7. Value string `json:"value"`
  8. Tag string `json:"tag"`
  9. Id string `json:"id"`
  10. }
  11. func (g *Rule) String() string {
  12. return fmt.Sprintf("value:%s, tag:%s id:%s\n", g.Value, g.Tag, g.Id)
  13. }
  14. type RuleList []Rule
  15. func (g RuleList) String() string {
  16. slist := make([]string, 0)
  17. for _, v := range g {
  18. slist = append(slist, v.String())
  19. }
  20. return strings.Join(slist, "")
  21. }
  22. func main() {
  23. g1 := Rule{Value: "hello", Tag: "1", Id: "1"}
  24. g2 := Rule{Value: "hello", Tag: "1", Id: "1"}
  25. g3 := Rule{Value: "hello", Tag: "1", Id: "1"}
  26. glist := RuleList{g1, g2, g3}
  27. fmt.Println(glist)
  28. }

答案2

得分: 0

你可以通过实现Stringer接口来实现这一点。以下是代码的翻译部分:

  1. package main
  2. import "fmt"
  3. type Dummy struct{
  4. Value, Tag, Id string
  5. }
  6. func (r Dummy) String() string {
  7. return fmt.Sprintf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
  8. }
  9. func main(){
  10. ls := make([]Dummy,0)
  11. ls = append(ls, Dummy{"x0", "t0", "i0"})
  12. ls = append(ls, Dummy{"x1", "t1", "i1"})
  13. ls = append(ls, Dummy{"x2", "t2", "i2"})
  14. ls = append(ls, Dummy{"x3", "t3", "i3"})
  15. fmt.Println(Dummy{"x0", "t0", "i0"})
  16. fmt.Println(ls)
  17. }

你可以在这个链接中了解更多关于Stringer接口的信息:Stringers

英文:

You can achieve this by implementing Stringers interface [more about Stringers]

  1. package main
  2. import "fmt"
  3. type Dummy struct{
  4. Value, Tag, Id string
  5. }
  6. func (r Dummy) String() string {
  7. return fmt.Sprintf("value:%v, tag:%v, id:%v\n", r.Value, r.Tag, r.Id)
  8. }
  9. func main(){
  10. ls := make([]Dummy,0)
  11. ls = append(ls, Dummy{"x0", "t0", "i0"})
  12. ls = append(ls, Dummy{"x1", "t1", "i1"})
  13. ls = append(ls, Dummy{"x2", "t2", "i2"})
  14. ls = append(ls, Dummy{"x3", "t3", "i3"})
  15. fmt.Println(Dummy{"x0", "t0", "i0"})
  16. fmt.Println(ls)
  17. }

huangapple
  • 本文由 发表于 2021年8月2日 10:40:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/68615821.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定