package main

import (
  "fmt"
  "net"
  "io/ioutil"
  "strings"
)

type DomainMap struct {
  Domain string
  IpMapping string
}

func retrieveDomains() []string {
  file_in, _ := ioutil.ReadFile("domains.txt")
  domain_list := string(file_in)
  return strings.Split(strings.TrimSpace(domain_list), "\n")
}

func domainLookup(domain string) DomainMap {
  rawIpAddresses, _ := net.LookupIP(domain)

  // If any found, grab only the first address for simplicity as the ip lookup can return an array
  ipAddress := ""
  if len(rawIpAddresses) > 0 {
    ipAddress = rawIpAddresses[0].String()
  }

  fmt.Println("Mapping: ", domain, "->", ipAddress)

  return DomainMap{domain, ipAddress}
}

func main() {
  domains := retrieveDomains()
  var domainMapping []DomainMap

  // Send our requests, one for each domain we get in their
  // own goroutine
  for _, domain := range domains {
    domainMapping = append(domainMapping, domainLookup(domain))
  }

  fmt.Println(domainMapping)
}