address.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package gofakeit
  2. import (
  3. "errors"
  4. "math/rand"
  5. "strings"
  6. )
  7. // AddressInfo is a struct full of address information
  8. type AddressInfo struct {
  9. Address string
  10. Street string
  11. City string
  12. State string
  13. Zip string
  14. Country string
  15. Latitude float64
  16. Longitude float64
  17. }
  18. // Address will generate a struct of address information
  19. func Address() *AddressInfo {
  20. street := Street()
  21. city := City()
  22. state := State()
  23. zip := Zip()
  24. return &AddressInfo{
  25. Address: street + ", " + city + ", " + state + " " + zip,
  26. Street: street,
  27. City: city,
  28. State: state,
  29. Zip: zip,
  30. Country: Country(),
  31. Latitude: Latitude(),
  32. Longitude: Longitude(),
  33. }
  34. }
  35. // Street will generate a random address street string
  36. func Street() (street string) {
  37. switch randInt := randIntRange(1, 2); randInt {
  38. case 1:
  39. street = StreetNumber() + " " + StreetPrefix() + " " + StreetName() + StreetSuffix()
  40. case 2:
  41. street = StreetNumber() + " " + StreetName() + StreetSuffix()
  42. }
  43. return
  44. }
  45. // StreetNumber will generate a random address street number string
  46. func StreetNumber() string {
  47. return strings.TrimLeft(replaceWithNumbers(getRandValue([]string{"address", "number"})), "0")
  48. }
  49. // StreetPrefix will generate a random address street prefix string
  50. func StreetPrefix() string {
  51. return getRandValue([]string{"address", "street_prefix"})
  52. }
  53. // StreetName will generate a random address street name string
  54. func StreetName() string {
  55. return getRandValue([]string{"address", "street_name"})
  56. }
  57. // StreetSuffix will generate a random address street suffix string
  58. func StreetSuffix() string {
  59. return getRandValue([]string{"address", "street_suffix"})
  60. }
  61. // City will generate a random city string
  62. func City() (city string) {
  63. switch randInt := randIntRange(1, 3); randInt {
  64. case 1:
  65. city = FirstName() + StreetSuffix()
  66. case 2:
  67. city = LastName() + StreetSuffix()
  68. case 3:
  69. city = StreetPrefix() + " " + LastName()
  70. }
  71. return
  72. }
  73. // State will generate a random state string
  74. func State() string {
  75. return getRandValue([]string{"address", "state"})
  76. }
  77. // StateAbr will generate a random abbreviated state string
  78. func StateAbr() string {
  79. return getRandValue([]string{"address", "state_abr"})
  80. }
  81. // Zip will generate a random Zip code string
  82. func Zip() string {
  83. return replaceWithNumbers(getRandValue([]string{"address", "zip"}))
  84. }
  85. // Country will generate a random country string
  86. func Country() string {
  87. return getRandValue([]string{"address", "country"})
  88. }
  89. // CountryAbr will generate a random abbreviated country string
  90. func CountryAbr() string {
  91. return getRandValue([]string{"address", "country_abr"})
  92. }
  93. // Latitude will generate a random latitude float64
  94. func Latitude() float64 { return (rand.Float64() * 180) - 90 }
  95. // LatitudeInRange will generate a random latitude within the input range
  96. func LatitudeInRange(min, max float64) (float64, error) {
  97. if min > max || min < -90 || min > 90 || max < -90 || max > 90 {
  98. return 0, errors.New("input range is invalid")
  99. }
  100. return randFloat64Range(min, max), nil
  101. }
  102. // Longitude will generate a random longitude float64
  103. func Longitude() float64 { return (rand.Float64() * 360) - 180 }
  104. // LongitudeInRange will generate a random longitude within the input range
  105. func LongitudeInRange(min, max float64) (float64, error) {
  106. if min > max || min < -180 || min > 180 || max < -180 || max > 180 {
  107. return 0, errors.New("input range is invalid")
  108. }
  109. return randFloat64Range(min, max), nil
  110. }