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

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

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)
}

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:

确定