Skip to content

Instantly share code, notes, and snippets.

@danimal141
Last active July 5, 2025 06:19
Show Gist options
  • Save danimal141/040a3d03598a6a51553a7a839f9d2d5a to your computer and use it in GitHub Desktop.
Save danimal141/040a3d03598a6a51553a7a839f9d2d5a to your computer and use it in GitHub Desktop.
A Tour of Go Exercise: Stringers
package main
import (
"fmt"
"strings"
"strconv"
)
type IPAddr [4]byte
func (ip IPAddr) String() string {
s := make([]string, len(ip))
for i, val := range ip {
s[i] = strconv.Itoa(int(val))
}
return strings.Join(s, ".")
}
func main() {
hosts := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
for name, ip := range hosts {
fmt.Printf("%v: %v\n", name, ip)
}
}
@amirhossein-ka
Copy link

amirhossein-ka commented Nov 30, 2021

i didnt check all answers for duplicate but this what i wrote ( it's a little too verbose XD) :

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (i IPAddr) String() string {
	var result string
	for index, value := range i {
		if index == 0 {
			result = fmt.Sprintf("%v", value)
			continue
		}
		result = fmt.Sprintf("%v.%v", result, value)
	}

	return result
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@phattranky
Copy link

I'm using append instead of concat string

package main

import (
	"fmt"
	"strings"
	"strconv"
)

type IPAddr [4]byte

func (ip IPAddr) String() string {
	s := make([]string, len(ip))
	
	for _, v := range ip {
		s = append(s, strconv.Itoa(int(v)))
	} 
	
	return strings.Join(s, ".")
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@mohitajampala
Copy link

package main

import "fmt"
import "strconv"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (p IPAddr) String() string {
	return fmt.Sprintf("%s.%s.%s.%s", strconv.Itoa(int(p[0])), strconv.Itoa(int(p[1])), strconv.Itoa(int(p[2])), strconv.Itoa(int(p[3])))
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@luigiraffale
Copy link

luigiraffale commented May 1, 2022

func (ip IPAddr) String() string {

//NESTED FOR-IF
var text string
for i, ipbyte := range ip {
if i == 3 {
text += fmt.Sprint(ipbyte)
} else {
text += fmt.Sprint(ipbyte)+"."
}
}
return text

//ONE ROW SOLUTION
return fmt.Sprintf("%v.%v.%v.%v", ip[0],ip[1],ip[2],ip[3] )
}

@nerewarin
Copy link

nerewarin commented May 3, 2022

func (i IPAddr) String() string {
	x := ""
	for _, s := range i {
		x = fmt.Sprintf("%v%v.", x, s)
	}
	return fmt.Sprintf("%v", x)
}

@svenjia
Copy link

svenjia commented Jun 2, 2022

func (ip IPAddr)String() string {
	var rt string
	for _,v := range ip {
		temp:=fmt.Sprint(v)
		rt+=temp+"."
	}
	return rt[0:len(rt)-1]
}

@monkemon
Copy link

monkemon commented Jul 1, 2022

my solution is punk, but i don't see a point id doing this in a loop:

func (ip IPAddr) String() string {
	out:= fmt.Sprintf("%v.%v.%v.%v", ip[0], ip[1], ip[2], ip[3])
	return out
}

@monkemon
Copy link

monkemon commented Jul 1, 2022

ok i noticed my idea wasn't unique so thumbs up for everyone who did it likewise :D

@vojtaripa
Copy link

vojtaripa commented Nov 4, 2022

//LINK: https://go.dev/tour/methods/18

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (ip IPAddr) String() string {
    
    newIP := ""
    
      for i:=0; i<3; i++{
	    newIP += fmt.Sprintf("%v",ip[i]) + "."
	    //fmt.Println(ip[i])
    }
    
    //FOR LAST ITTERATION:
    newIP += fmt.Sprintf("%v",ip[3])
       
        //NOW RETURN
    return newIP

}

func main() {
    
    //defines variable host which holds a MAP of IPs to names
    hosts := map[string]IPAddr{
	    "loopback":  {127, 0, 0, 1},
	    "googleDNS": {8, 8, 8, 8},
    }
    
    
    
    //now for each name, translate the hosts
    for name, ip := range hosts {
	    fmt.Printf("%v: %v\n", name, ip)
    }
    
    
}

RESULT:
loopback: 127.0.0.1
googleDNS: 8.8.8.8

@krapie
Copy link

krapie commented Dec 9, 2022

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (ipAddr *IPAddr) String() string {
	return fmt.Sprintf("%v.%v.%v.%v", ipAddr[0], ipAddr[1], ipAddr[2], ipAddr[3])
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@MichelNHKuo
Copy link

MichelNHKuo commented Jun 20, 2023

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (ip IPAddr) String() string {
	ips := fmt.Sprintf("%v.%v.%v.%v", ip[0], ip[1], ip[2], ip[3])
	return ips
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@Max95Cohen
Copy link

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (i IPAddr) String() string {
	return fmt.Sprintf("%v.%v.%d.%d", i[0], i[1], i[2], i[3])
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@alexandrov-va
Copy link

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (ip IPAddr) String() (s string) {
	for _, v := range ip {
		s += fmt.Sprintf("%v.", v)
	}
	
	s = s[:len(s)-1]
	return
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@Fleyderer
Copy link

Fleyderer commented Nov 3, 2023

Hello from Pythonists 😎

func (ip IPAddr) String() string {
	return strings.Join(strings.Split(strings.Trim(fmt.Sprint([len(ip)]byte(ip)), "[]"), " "), ".")
}

@megadalp
Copy link

Hello from Pythonists 😎

func (ip IPAddr) String() string {
	return strings.Join(strings.Split(strings.Trim(fmt.Sprint([len(ip)]byte(ip)), "[]"), " "), ".")
}

Our respects from Perl devs too :))

func (ip IPAddr) String() string {
	return strings.Join(regexp.MustCompile("\\d+").FindAllString(fmt.Sprint([len(ip)]byte(ip)), -1), ".")
}

@pemaig
Copy link

pemaig commented Apr 17, 2024

package main

import (
	"fmt"
	"strconv"
)

type IPAddr [4]byte

func (ip IPAddr) String() string {
	var str string
	for i, v := range ip {
		if convertedV := strconv.Itoa(int(v)); i == 0 {
			str += convertedV
		} else {
			str += "." + convertedV
		}
	}
	return str
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@tejas-kr
Copy link

Mine lol

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (ip_add IPAddr) String() string {
	return fmt.Sprintf("%d.%d.%d.%d", ip_add[0],ip_add[1],ip_add[2],ip_add[3])
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@warhammer327
Copy link

warhammer327 commented Oct 10, 2024

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.

func (ip IPAddr) String() string {
	return fmt.Sprintf("%v.%v.%v.%v\n", ip[0],ip[1], ip[2], ip[3])
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@priyanshoon
Copy link

package main

import "fmt"

type IPAddr [4]byte

func (ip IPAddr) String() string {
	return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for _, ip := range hosts {
		fmt.Println(ip.String())
	}
}

Nice answer, I couldn't think of it

@priyanshoon
Copy link

package main

import "fmt"

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (ip IPAddr) String() string {
	var ipFinal string = ""
	for i := range ip {
		if i < 3 {
			ipFinal = ipFinal + fmt.Sprintf("%d", ip[i]) + "."
		} else {
			ipFinal = ipFinal + fmt.Sprintf("%d", ip[i])
		}
	}
	return ipFinal
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@filipcvejic
Copy link

package main

import (
	"fmt"
	"strings"
	"strconv"
)

type IPAddr [4]byte

// TODO: Add a "String() string" method to IPAddr.
func (ip IPAddr) String() string {
	s := make([]string, len(ip))
	for i, val := range ip {
		s[i] = strconv.Itoa(int(val))
	}
	return strings.Join(s, ".")
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

@duj4
Copy link

duj4 commented Jul 5, 2025

I'm using append instead of concat string

package main

import (
	"fmt"
	"strings"
	"strconv"
)

type IPAddr [4]byte

func (ip IPAddr) String() string {
	s := make([]string, len(ip))
	
	for _, v := range ip {
		s = append(s, strconv.Itoa(int(v)))
	} 
	
	return strings.Join(s, ".")
}

func main() {
	hosts := map[string]IPAddr{
		"loopback":  {127, 0, 0, 1},
		"googleDNS": {8, 8, 8, 8},
	}
	for name, ip := range hosts {
		fmt.Printf("%v: %v\n", name, ip)
	}
}

I think it'd be better to declare the slice s like make([]string, 0, len(ip)). Otherwise, the output would be like "....127.0.0.1" as the append will add the digit from index 4.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment