我想编写一个Join带有String()方法的任意对象的函数:
package main
import (
"fmt"
"strings"
)
type myint int
func (i myint) String() string {
return fmt.Sprintf("%d", i)
}
func main() {
parts := []myint{myint(1), myint(5), myint(6)}
fmt.Println(Join(parts, ", "))
}
func Join(parts []fmt.Stringer, sep string) string {
stringParts := make([]string, len(parts))
for i, part := range(parts) {
stringParts [i] = part.String()
}
return strings.Join(stringParts , sep)
}
Run Code Online (Sandbox Code Playgroud)
http://play.golang.org/p/EhkbyibzHw
[]myint无法传递给Join,因为它不是类型fmt.Stringer,所以我必须写:
parts := []fmt.Stringer{myint(1), myint(5), myint(6)}
Run Code Online (Sandbox Code Playgroud)
但是如果我需要parts另一个值必须是整数的操作呢?我应该把一片切成myint …
我有一个包含三个字段的类型
type Person struct {
FirstName string
LastName string
Age int
}
Run Code Online (Sandbox Code Playgroud)
创建一个实例并使用默认fmt.Sprint()返回{John Smith 45}。但是对于我的用例,我需要一串 format John, Smith, 45。逗号分隔的列表,没有被大括号包围。有没有比以下更可重用和有效的方法:
fmt.Sprintf("%s, %s, %d", x.FirstName, x.LastName, x.Age)
Run Code Online (Sandbox Code Playgroud)
我将在其他类型中大量使用此方法,我更喜欢通用方法,而不必为我使用的每种类型输入格式:
func asFields(data interface{}) string {
// TODO logic here
}
Run Code Online (Sandbox Code Playgroud) Golang noob问题:为什么我不能"%+v"在String()实现方法中使用该结构的标志?
我有一个结构,我想实现一个String()漂亮的打印方法.我喜欢这里给出的答案,但我不喜欢键入,所以我试图修改它以使用"%+v"结构的格式标志返回一个字符串.来自fmt doc:
%v打印结构时默认格式的值,加号标志(%+ v)添加字段名称
如果我简单地调用它,这可以正常工作fmt.Printf("%+v", color),但如果我尝试将+标志放在String()实现中,我会得到堆栈溢出(我第一次在stackoverflow.com上询问"堆栈溢出"问题;))
我确定我不理解这里的指针引用,或者有一些递归.我怀疑这个菜鸟找到了我的第一个Golang虫子,所以有人可以解释一下吗?
请参阅此处的播放演示https://play.golang.org/p/13_qI8Iwwa