Go String(): Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 13: Line 13:
}
}
</syntaxhighlight>
</syntaxhighlight>
<code>Stringer</code> is implemented by any type that has a <code>String()</code> method, which defines the "native" format for that value. The <code>String()</code> method is used to print values passed as an operand to any format that accepts a string or to an unformatted printer such as <code>Print</code>. For a usage example, see: {{Internal|The Equivalent of Java toString() in Go#Overview|The Equivalent of Java toString() in Go}}
<code>Stringer</code> is implemented by any type that has a <code>String()</code> method, which defines the "native" format for that value. The <code>String()</code> method is used to print values passed as an operand to any format that accepts a string or to an unformatted printer such as <code>Print</code>.  
=Overview=
 
Java developers are used to declare a <code>public String toString() {...}</code> method in their class to get instances of that class rendered as custom Strings.
 
Go has a similar facility. It consists in making the type that needs this behavior implement the <code>[[Go_Package_fmt#fmt.Stringer|fmt.Stringer]]</code> interface, which has only one <code>String()</code> method that renders the "native" string representation for the instances of that type. The <code>print()</code> or <code>fmt.*Print*</code> library code will use the method if found on the instance to be rendered as string.
 
Note that is important whether we declare a [[Go_Language_Object_Oriented_Programming#Value_Receiver_Type|value]] or a [[Go_Language_Object_Oriented_Programming#Pointer_Receiver_Type|pointer receiver type]]. Depending on how the receiver type is declared, we will have to pass to the rendering code either a value, or a pointer to the instance of the type to achieve the desired behavior.
 
=Example=
<syntaxhighlight lang='go'>
type SomeType struct {
ID string
}
 
// String makes SomeType implement the fmt.Stringer interface. It is important whether a value or a pointer receiver type is declared.
func (e SomeType) String() string {
return fmt.Sprintf("SomeType[%s]", e.ID)
}
 
...
 
t := SomeType{ID: "001"}
fmt.Println(t)
</syntaxhighlight>
will render:
<font size=-2>
SomeType[001]
</font>

Revision as of 23:41, 30 August 2024

Internal

Overview

type Stringer interface {
  String() string
}

Stringer is implemented by any type that has a String() method, which defines the "native" format for that value. The String() method is used to print values passed as an operand to any format that accepts a string or to an unformatted printer such as Print.

Overview

Java developers are used to declare a public String toString() {...} method in their class to get instances of that class rendered as custom Strings.

Go has a similar facility. It consists in making the type that needs this behavior implement the fmt.Stringer interface, which has only one String() method that renders the "native" string representation for the instances of that type. The print() or fmt.*Print* library code will use the method if found on the instance to be rendered as string.

Note that is important whether we declare a value or a pointer receiver type. Depending on how the receiver type is declared, we will have to pass to the rendering code either a value, or a pointer to the instance of the type to achieve the desired behavior.

Example

type SomeType struct {
	ID string
}

// String makes SomeType implement the fmt.Stringer interface. It is important whether a value or a pointer receiver type is declared.
func (e SomeType) String() string {
	return fmt.Sprintf("SomeType[%s]", e.ID)
}

...

t := SomeType{ID: "001"}
fmt.Println(t)

will render:

SomeType[001]