Golang : Dealing with postal or zip code example
Problem :
For some countries, the postal code
or zip code
starts with zero and this can be problematic for developers. Quite frequently, programmers will assume that the postal or zip code is in integer type and this is will introduce funky bugs later on. Why? because leading zero in integer will the turn the variable/constant value to become Octal value and thus screw up the final value.
Solution :
The code below will simulate a zip code input with leading zero and type integer. It will demonstrate the problem and show you how to fix it.
package main
import (
"fmt"
"reflect"
"strconv"
)
func main() {
//leading zero will convert zip code to octal!
var iZip = 0000123
fmt.Println("No longer int, but octal value : ", iZip) //funky value
fmt.Printf("Type : %v \n", reflect.TypeOf(iZip))
fmt.Println("=========================================")
// do not use this method as the leading zero will disappear!
zip := strconv.FormatInt(int64(iZip), 8) // base 8 for Octal
fmt.Println("Wrong! Don't use this method because of : ")
fmt.Println("Missing zero : ", zip)
fmt.Printf("Type : %v \n", reflect.TypeOf(zip))
fmt.Println("=========================================")
// always convert zip code to type string before display!
// calculate the size of the iZip octal - the wrong way!
t := reflect.TypeOf(iZip)
fmt.Println("Type : ", t)
// play.golang.org return 4
// go run will return 8 bytes - not to be trusted for now
fmt.Println("Size : ", t.Size())
// pad zero up to the length of 7, o is for expecting octal value
newZip := fmt.Sprintf("0000%o", iZip)
// ** NOTE : Have to hardcode 7 because there is no way
// I can programmatically insert the t.Size()-1 into fmt.Sprintf()
fmt.Println("Converted from integer to string : ", newZip)
fmt.Printf("Type : %v \n", reflect.TypeOf(newZip))
}
Output :
No longer int, but octal value : 83
Type : int
=========================================
Wrong! Don't use this method because of :
Missing zero : 123
Type : string
=========================================
Converted from integer to string : 0000123
Type : string
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+7.1k Golang : Example of custom handler for Gorilla's Path usage.
+11.7k Golang : How to parse plain email text and process email header?
+11.6k Golang : Setup API server or gateway with Caddy and http.ListenAndServe() function example
+25.5k Golang : How to read integer value from standard input ?
+48.2k Golang : Upload file from web browser to server
+12k Golang : Encrypt and decrypt data with x509 crypto
+7k Golang : Dealing with postal or zip code example
+34.3k Golang : Smarter Error Handling with strings.Contains()
+8.1k Golang : Count leading or ending zeros(any item of interest) example
+11.1k Golang : Byte format example
+7.2k Golang : Gorrila set route name and get the current route name
+3.4k Golang : Switch Redis database redis.NewClient