Golang : What fmt.Println() can do and println() cannot do
A lot of rookies got confused on why their program is not working as intended when using println()
function. New Golang developers need to know what is difference between fmt.Println()
, fmt.Print()
functions versus println()
and print()
functions. What are they for and why a developer should not use them anymore.
For this tutorial, we will explore what fmt.Println()
can do and println()
can't do
Below is a simple program that demonstrates why Golang developers should not use println()
and print()
functions in their code. As you can see in the output, println()
function prints out a memory address instead of the slice data. Most rookies will be confused by this and couldn't comprehend why their code is not working as intended.
package main
import (
"fmt"
"sort"
)
var game = [11]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var bestgame = [11]int{10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
var bestgames [][]int
func main() {
//for k, v := range game {
// fmt.Println(k, v)
//}
//for i, j := range bestgame {
// fmt.Println(i, j)
//}
if game[10] > bestgame[10] {
bestgame = game
sort.Ints(bestgame[:9])
bestgames = append(bestgames, bestgame[:])
fmt.Println("bestgame", "G", bestgame[0], bestgame[1])
}
for m, q := range bestgames {
fmt.Println(m, q)
}
fmt.Println("the result of println(bestgames = ", bestgames) //<---- use this
println("the result of println(bestgames = ", bestgames) // instead of this. Memory address instead of slice data
}
Output:
bestgame G 0 1
0 [0 1 2 3 4 5 6 7 8 9 10]
the result of println(bestgames = [[0 1 2 3 4 5 6 7 8 9 10]]
the result of println(bestgames = [1/1]0x40a0f0 (this line will be shown as red in play.golang.org)
Ok, now we know it is bad to use println()
and print()
functions in production code. But why these functions are there? What for?
From the official Golang's documentation, these functions are meant for bootstrapping usage and they do not return result.
Current implementations provide several built-in functions useful during bootstrapping. These functions are documented for completeness but are not guaranteed to stay in the language. They do not return a result.
Function Behavior
print prints all arguments; formatting of arguments is implementation-specific
println like print but prints spaces between arguments and a newline at the end
Implementation restriction: print and println need not accept arbitrary argument types, but printing of boolean, numeric, and string types must be supported.
Hope this helps and happy coding!
Reference :
See also : Golang : Sort and reverse sort a slice of integers
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
+27.3k PHP : Count number of JSON items/objects
+17.7k Golang : Put UTF8 text on OpenCV video capture image frame
+17.9k Golang : How to remove certain lines from a file
+10.2k Swift : Convert (cast) String to Integer
+8.9k Golang : Gonum standard normal random numbers example
+3.9k Javascript : Empty an array example
+31.2k Golang : How to convert(cast) string to IP address?
+9.7k Golang : Translate language with language package example
+7.8k Golang : Multiplexer with net/http and map
+30.5k Golang : Interpolating or substituting variables in string examples
+10.9k Golang : Fix - does not implement sort.Interface (missing Len method)
+20.8k Golang : How to force compile or remove object files first before rebuild?