Go의 ToString () 함수


95

strings.Join함수는 문자열 조각 만받습니다.

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))

그러나 ToString()함수 를 구현하는 임의의 객체를 전달할 수 있으면 좋을 것 입니다.

type ToStringConverter interface {
    ToString() string
}

Go에 이와 같은 것이 있습니까 아니면 intToString 메서드와 같은 기존 유형을 장식하고 주위에 래퍼를 작성 strings.Join해야합니까?

func Join(a []ToStringConverter, sep string) string

7
참고 이러한 인터페이스는 이미 존재 : golang.org/pkg/fmt/#Stringer
데니스 Séguret


@daemon이 중복이 필요하지 않습니다. 현재 질문은 제 생각에 충분히 명확했으며 실제 (또는 완전한) 답변이 없다는 사실이 다시 물어봐야한다는 의미는 아닙니다.
Denys Séguret 2012

답변:


182

String() string명명 된 형식에 메서드를 연결하고 사용자 지정 "ToString"기능을 즐기십시오.

package main

import "fmt"

type bin int

func (b bin) String() string {
        return fmt.Sprintf("%b", b)
}

func main() {
        fmt.Println(bin(42))
}

플레이 그라운드 : http://play.golang.org/p/Azql7_pDAA


산출

101010

1
대답이 전환이 유일한 옵션이라는 것을 의미하지는 않지만 맞습니다. 요점은 유형에 연결된 String () 메서드에 있습니다. 어디서나 fmt. *는 첨부 된 메서드를 찾아서 해당 형식의 문자열 표현을 가져 오는 데 사용합니다.
zzzz

2
bin(42).String()다른 예로 추가 하는 것이 답을 위해 더 좋을 것입니다.
Thellimist

참고 : Error() stringString() string
functon

1
즉, Stringer인터페이스를 구현하십시오 : golang.org/pkg/fmt/#Stringer
tothemario

18

당신이 소유 한 경우 struct, 당신은 자신이 할 수 변환를 문자열로 기능.

package main

import (
    "fmt"
)

type Color struct {
    Red   int `json:"red"`
    Green int `json:"green"`
    Blue  int `json:"blue"`
}

func (c Color) String() string {
    return fmt.Sprintf("[%d, %d, %d]", c.Red, c.Green, c.Blue)
}

func main() {
    c := Color{Red: 123, Green: 11, Blue: 34}
    fmt.Println(c) //[123, 11, 34]
}

4

구조체를 사용한 또 다른 예 :

package types

import "fmt"

type MyType struct {
    Id   int    
    Name string
}

func (t MyType) String() string {
    return fmt.Sprintf(
    "[%d : %s]",
    t.Id, 
    t.Name)
}

사용할 때주의하세요.
'+'로 연결하면 컴파일되지 않습니다.

t := types.MyType{ 12, "Blabla" }

fmt.Println(t) // OK
fmt.Printf("t : %s \n", t) // OK
//fmt.Println("t : " + t) // Compiler error !!!
fmt.Println("t : " + t.String()) // OK if calling the function explicitly

-7

다음과 같은 것을 선호합니다.

type StringRef []byte

func (s StringRef) String() string {
        return string(s[:])
}

…

// rather silly example, but ...
fmt.Printf("foo=%s\n",StringRef("bar"))

4
쓸모없는 :, 즉, 필요하지 않습니다 string(s). 또한, 경우가 b있습니다 []bytestring(b)훨씬 간단하고 다음을 StringRef(b).String(). 마지막으로, %s(와 달리 %v) 일반적으로 []byte잠재적 인 복사본없이 이미 인수를 문자열로 인쇄 하므로 귀하의 예제는 무의미 합니다 string(b).
Dave C
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.