{"id":1096,"date":"2026-08-17T05:37:56","date_gmt":"2026-08-17T05:37:56","guid":{"rendered":"https:\/\/www.devopsschool.com\/tutorials\/?p=1096"},"modified":"2026-08-17T05:37:57","modified_gmt":"2026-08-17T05:37:57","slug":"go-tutorials-numeric-types-beginner-tutorial","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/tutorials\/go-tutorials-numeric-types-beginner-tutorial\/","title":{"rendered":"Go Tutorials: Numeric Types Beginner Tutorial"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go has four main families of numeric types:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Numbers\n\u2502\n\u251c\u2500\u2500 Signed Integers\n\u2502   \u251c\u2500\u2500 int\n\u2502   \u251c\u2500\u2500 int8\n\u2502   \u251c\u2500\u2500 int16\n\u2502   \u251c\u2500\u2500 int32\n\u2502   \u2514\u2500\u2500 int64\n\u2502\n\u251c\u2500\u2500 Unsigned Integers\n\u2502   \u251c\u2500\u2500 uint\n\u2502   \u251c\u2500\u2500 uint8\n\u2502   \u251c\u2500\u2500 uint16\n\u2502   \u251c\u2500\u2500 uint32\n\u2502   \u2514\u2500\u2500 uint64\n\u2502\n\u251c\u2500\u2500 Floating Point\n\u2502   \u251c\u2500\u2500 float32\n\u2502   \u2514\u2500\u2500 float64\n\u2502\n\u2514\u2500\u2500 Complex Numbers\n    \u251c\u2500\u2500 complex64\n    \u2514\u2500\u2500 complex128<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The simplest way to remember them is:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Type family<\/th><th>Stores<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td><code>int<\/code><\/td><td>Whole numbers, positive or negative<\/td><td><code>-10<\/code>, <code>0<\/code>, <code>25<\/code><\/td><\/tr><tr><td><code>uint<\/code><\/td><td>Whole numbers, zero or positive<\/td><td><code>0<\/code>, <code>25<\/code>, <code>100<\/code><\/td><\/tr><tr><td><code>float<\/code><\/td><td>Decimal numbers<\/td><td><code>10.5<\/code>, <code>3.14<\/code><\/td><\/tr><tr><td><code>complex<\/code><\/td><td>Real + imaginary numbers<\/td><td><code>3 + 4i<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">1. Signed Integers<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">A <strong>signed integer<\/strong> can contain:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>negative numbers\nzero\npositive numbers<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var temperature int = -10<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here <code>-10<\/code> is allowed because <code>int<\/code> is <strong>signed<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Signed integer types<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Type<\/th><th>Size<\/th><th>Approximate range<\/th><\/tr><\/thead><tbody><tr><td><code>int8<\/code><\/td><td>8 bits<\/td><td>-128 to 127<\/td><\/tr><tr><td><code>int16<\/code><\/td><td>16 bits<\/td><td>-32,768 to 32,767<\/td><\/tr><tr><td><code>int32<\/code><\/td><td>32 bits<\/td><td>-2.1 billion to +2.1 billion<\/td><\/tr><tr><td><code>int64<\/code><\/td><td>64 bits<\/td><td>Very large<\/td><\/tr><tr><td><code>int<\/code><\/td><td>32 or 64 bits<\/td><td>Depends on system<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For most normal programming, use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Example<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var age int = 40\n    var temperature int = -5\n    var balance int = -1000\n\n    fmt.Println(\"Age:\", age)\n    fmt.Println(\"Temperature:\", temperature)\n    fmt.Println(\"Balance:\", balance)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Age: 40\nTemperature: -5\nBalance: -1000<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">When should I use <code>int<\/code>?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use <code>int<\/code> for normal whole-number calculations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Typical use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>age := 40\nusers := 500\nitems := 10\ntemperature := -5\nscore := 95<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example, loop counters normally use <code>int<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>for i := 0; i &lt; 10; i++ {\n    fmt.Println(i)\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Simple rule<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">If you need a normal whole number and don&#8217;t have a special requirement, use <code>int<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">2. <code>int8<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>int8<\/code> is a very small signed integer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var temperature int8 = -20<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Range:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-128 to 127<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var temperature int8 = -20\n\n    fmt.Println(temperature)\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Use cases<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You may use <code>int8<\/code> when:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Memory layout matters<\/li>\n\n\n\n<li>Reading binary data<\/li>\n\n\n\n<li>Working with low-level protocols<\/li>\n\n\n\n<li>Interacting with hardware<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For normal application development, you usually do <strong>not<\/strong> need <code>int8<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">3. <code>int16<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Range:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-32768 to 32767<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var altitude int16 = -500<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Possible use cases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Binary file formats<\/li>\n\n\n\n<li>Network protocols<\/li>\n\n\n\n<li>Hardware data<\/li>\n\n\n\n<li>Memory-sensitive structures<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Again, normal application code usually uses <code>int<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">4. <code>int32<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var population int32 = 1000000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">One very important use of <code>int32<\/code> in Go is Unicode characters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go has an alias:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rune = int32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var letter rune = 'A'\n\n    fmt.Println(letter)\n    fmt.Printf(\"%c\\n\", letter)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>65\nA<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rune\n \u2193\nint32\n \u2193\nUnicode character<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">5. <code>int64<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>int64<\/code> can store very large whole numbers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var population int64 = 8000000000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use cases include:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Very large counters<\/li>\n\n\n\n<li>Unix timestamps<\/li>\n\n\n\n<li>Database IDs<\/li>\n\n\n\n<li>File sizes<\/li>\n\n\n\n<li>Large financial quantities expressed in smallest units<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var fileSize int64 = 5_000_000_000\n\n    fmt.Println(fileSize)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Notice this:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>5_000_000_000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go allows <code>_<\/code> to make large numbers easier to read.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It is the same as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>5000000000<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">6. Unsigned Integers<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Unsigned integers <strong>cannot contain negative numbers<\/strong>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Signed:\n\n-10  -5  0  5  10\n\n\nUnsigned:\n\n0  5  10  100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var users uint = 100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This works.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var users uint = -100<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">doesn&#8217;t work because <code>uint<\/code> cannot represent negative values.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Unsigned integer types<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Type<\/th><th>Minimum<\/th><th>Maximum<\/th><\/tr><\/thead><tbody><tr><td><code>uint8<\/code><\/td><td>0<\/td><td>255<\/td><\/tr><tr><td><code>uint16<\/code><\/td><td>0<\/td><td>65,535<\/td><\/tr><tr><td><code>uint32<\/code><\/td><td>0<\/td><td>~4.29 billion<\/td><\/tr><tr><td><code>uint64<\/code><\/td><td>0<\/td><td>Very large<\/td><\/tr><tr><td><code>uint<\/code><\/td><td>0<\/td><td>System dependent<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">7. <code>uint<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var numberOfUsers uint = 500\n\n    fmt.Println(numberOfUsers)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use cases can include values that are inherently non-negative.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bit manipulation\nbinary protocols\nhardware registers\nmemory-related values<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But here&#8217;s an important Go practice:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Don&#8217;t automatically use <code>uint<\/code> just because a value cannot logically be negative.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">For example, for the number of students:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>students := 50<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Using <code>int<\/code> is normally easier.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">8. <code>uint8<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>uint8<\/code> has an important role in Go.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Range:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 \u2192 255<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go has an alias:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte = uint8<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var x byte = 65<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is essentially:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var x uint8 = 65<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is why byte arrays are common when working with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Files<\/li>\n\n\n\n<li>Network data<\/li>\n\n\n\n<li>Images<\/li>\n\n\n\n<li>Strings<\/li>\n\n\n\n<li>Raw binary data<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var value uint8 = 255\n    var letter byte = 'A'\n\n    fmt.Println(value)\n    fmt.Println(letter)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>255\n65<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Remember:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte\n \u2193\nuint8\n \u2193\n0-255<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">9. Floating-Point Numbers<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Integers cannot store decimal fractions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10\n20\n-5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">are integers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>10.5\n3.14\n99.99<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">are floating-point numbers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Go provides:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>float32\nfloat64<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">10. <code>float32<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>float32<\/code> uses 32 bits.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var temperature float32 = 36.5\n\n    fmt.Println(temperature)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Typical use cases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Graphics<\/li>\n\n\n\n<li>Games<\/li>\n\n\n\n<li>Scientific data where 32-bit precision is sufficient<\/li>\n\n\n\n<li>Large arrays where memory usage matters<\/li>\n\n\n\n<li>APIs\/libraries requiring 32-bit floats<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For ordinary Go applications, however, <code>float64<\/code> is usually preferred.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">11. <code>float64<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>float64<\/code> provides much higher precision.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var price float64 = 199.99\n    var pi float64 = 3.141592653589793\n\n    fmt.Println(\"Price:\", price)\n    fmt.Println(\"Pi:\", pi)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use cases:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>measurements\npercentages\nstatistics\nscientific calculations\ncoordinates\naverages\ngeneral decimal calculations<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Important<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you write:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>price := 99.99<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go normally infers:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>float64<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>price := 99.99<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is effectively similar to:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var price float64 = 99.99<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Beginner rule<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Use <code>float64<\/code> unless you specifically need <code>float32<\/code>.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">12. Be Careful Using Floats for Money<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This looks natural:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>price := 10.99<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">But floating-point numbers cannot represent every decimal value perfectly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    result := 0.1 + 0.2\n\n    fmt.Printf(\"%.20f\\n\", result)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You may see something like:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0.30000000000000004441<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore, for exact money calculations, applications commonly store money in the smallest currency unit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>price := 10.99<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">you might store:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>priceInCents := 1099<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or for Indian rupees:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>priceInPaise := 1099<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">representing:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u20b910.99<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">13. Complex Numbers<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Go also supports complex numbers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A complex number consists of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>real part + imaginary part<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 + 4i<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Here:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 = real part\n4 = imaginary part\ni = imaginary unit<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go has:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>complex64\ncomplex128<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">14. <code>complex64<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>complex64<\/code> consists approximately of:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>float32 + float32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var number complex64 = 3 + 4i\n\n    fmt.Println(number)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(3+4i)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Typical use cases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Signal processing<\/li>\n\n\n\n<li>Electrical engineering<\/li>\n\n\n\n<li>Scientific calculations<\/li>\n\n\n\n<li>Fourier transforms<\/li>\n\n\n\n<li>Mathematical simulations<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Most normal web\/backend programs never need this type.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">15. <code>complex128<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\"><code>complex128<\/code> uses greater precision.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conceptually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>complex128\n    \u2502\n    \u251c\u2500\u2500 float64 real part\n    \u2502\n    \u2514\u2500\u2500 float64 imaginary part<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var number complex128 = 3 + 4i\n\n    fmt.Println(\"Number:\", number)\n    fmt.Println(\"Real:\", real(number))\n    fmt.Println(\"Imaginary:\", imag(number))\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Number: (3+4i)\nReal: 3\nImaginary: 4<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Go provides built-in functions:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>real()\nimag()\ncomplex()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x := complex(3.0, 4.0)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">creates:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>3 + 4i<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">16. One Complete Example<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This example demonstrates all four major families.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n\n    \/\/ --------------------------------\n    \/\/ 1. SIGNED INTEGER\n    \/\/ --------------------------------\n\n    \/\/ Can store negative and positive whole numbers.\n    var temperature int = -10\n\n    \/\/ --------------------------------\n    \/\/ 2. UNSIGNED INTEGER\n    \/\/ --------------------------------\n\n    \/\/ Can store only zero or positive whole numbers.\n    var packetValue uint = 255\n\n    \/\/ --------------------------------\n    \/\/ 3. FLOATING POINT\n    \/\/ --------------------------------\n\n    \/\/ Can store decimal numbers.\n    var price float64 = 199.99\n\n    \/\/ --------------------------------\n    \/\/ 4. COMPLEX NUMBER\n    \/\/ --------------------------------\n\n    \/\/ Stores real + imaginary values.\n    var signal complex128 = 3 + 4i\n\n    fmt.Println(\"Temperature:\", temperature)\n    fmt.Println(\"Packet value:\", packetValue)\n    fmt.Println(\"Price:\", price)\n    fmt.Println(\"Signal:\", signal)\n\n    fmt.Println(\"Signal real part:\", real(signal))\n    fmt.Println(\"Signal imaginary part:\", imag(signal))\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Temperature: -10\nPacket value: 255\nPrice: 199.99\nSignal: (3+4i)\nSignal real part: 3\nSignal imaginary part: 4<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">17. <code>int<\/code> vs <code>uint<\/code> vs <code>float64<\/code> vs <code>complex128<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This comparison is the most important part to remember.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Requirement<\/th><th>Best choice<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>Normal whole number<\/td><td><code>int<\/code><\/td><td><code>40<\/code><\/td><\/tr><tr><td>Negative whole number<\/td><td><code>int<\/code><\/td><td><code>-10<\/code><\/td><\/tr><tr><td>Low-level non-negative integer<\/td><td><code>uint<\/code> family<\/td><td><code>255<\/code><\/td><\/tr><tr><td>Raw byte<\/td><td><code>byte<\/code> \/ <code>uint8<\/code><\/td><td><code>65<\/code><\/td><\/tr><tr><td>Unicode character<\/td><td><code>rune<\/code> \/ <code>int32<\/code><\/td><td><code>'\u4f60'<\/code><\/td><\/tr><tr><td>Decimal number<\/td><td><code>float64<\/code><\/td><td><code>10.25<\/code><\/td><\/tr><tr><td>Memory-sensitive decimal<\/td><td><code>float32<\/code><\/td><td><code>10.25<\/code><\/td><\/tr><tr><td>Complex mathematics<\/td><td><code>complex128<\/code><\/td><td><code>3 + 4i<\/code><\/td><\/tr><tr><td>Lower-precision complex number<\/td><td><code>complex64<\/code><\/td><td><code>3 + 4i<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">18. Type Conversion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Go does <strong>not<\/strong> automatically mix numeric types.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var x int = 10\nvar y float64 = 20.5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You cannot simply do:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>result := x + y<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">because:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x = int\ny = float64<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You have to convert one type.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var x int = 10\n    var y float64 = 20.5\n\n    result := float64(x) + y\n\n    fmt.Println(result)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Output:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>30.5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>x\n10\n\u2502\n\u2502 float64(x)\n\u25bc\n10.0\n     +\n20.5\n\u2500\u2500\u2500\u2500\u2500\n30.5<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">19. Overflow<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Every numeric type has a limit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>uint8<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">can only hold:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>0 \u2192 255<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">So this is invalid:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var x uint8 = 300<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">because:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>300 &gt; 255<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Similarly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int8<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">supports:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-128 \u2192 127<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Therefore:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var x int8 = 200<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">is invalid.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">20. Special Aliases: <code>byte<\/code> and <code>rune<\/code><\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Two names appear constantly in Go:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte\nrune<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">They aren&#8217;t entirely new numeric storage formats.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte = uint8\nrune = int32<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Think of them as meaningful names:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Type<\/th><th>Actually<\/th><th>Meaning\/use<\/th><\/tr><\/thead><tbody><tr><td><code>byte<\/code><\/td><td><code>uint8<\/code><\/td><td>Raw byte\/data<\/td><\/tr><tr><td><code>rune<\/code><\/td><td><code>int32<\/code><\/td><td>Unicode character<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>package main\n\nimport \"fmt\"\n\nfunc main() {\n    var b byte = 'A'\n    var r rune = '\u4f60'\n\n    fmt.Println(b)\n    fmt.Printf(\"%c\\n\", b)\n\n    fmt.Println(r)\n    fmt.Printf(\"%c\\n\", r)\n}<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">21. Practical Real-World Examples<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">Age<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>age := 40<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Number of users<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>users := 1000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Usually:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Temperature<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>temperature := -5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">or if decimals are needed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>temperature := -5.7<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>float64<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Height<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>height := 175.5<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>float64<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">File size<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var size int64 = 10_000_000_000<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>int64<\/code> can be useful.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Network byte<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var packetByte byte = 255<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>byte \/ uint8<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Unicode character<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var character rune = '\u65e5'<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>rune \/ int32<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Scientific complex value<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>var signal complex128 = 2.5 + 3.7i<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>complex128<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">22. The Rule You Should Remember<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">As a beginner, don&#8217;t overthink all the numeric types.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For approximately <strong>90% of normal Go application code<\/strong>, think:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Whole number\n     \u2193\n    int\n\n\nDecimal number\n     \u2193\n  float64\n\n\nRaw data \/ bytes\n     \u2193\n byte \/ uint8\n\n\nUnicode character\n     \u2193\n rune \/ int32\n\n\nComplex mathematics\n     \u2193\n complex128<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">And only deliberately choose:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>int8\nint16\nuint16\nfloat32\ncomplex64\n...<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">when you have a specific reason such as memory layout, binary protocols, hardware, APIs, or scientific requirements.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final Cheat Sheet<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Normal whole number\nage := 40                    \/\/ int\n\n\/\/ Negative whole number\ntemperature := -10           \/\/ int\n\n\/\/ Decimal\nprice := 99.99               \/\/ float64\n\n\/\/ Large integer\nvar size int64 = 5_000_000_000\n\n\/\/ Raw byte\nvar data byte = 255          \/\/ byte = uint8\n\n\/\/ Unicode character\nvar letter rune = '\u65e5'       \/\/ rune = int32\n\n\/\/ Unsigned low-level number\nvar flags uint32 = 100\n\n\/\/ Complex mathematics\nvar signal complex128 = 3 + 4i<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The most useful mental model is simply:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>int<\/code> = whole numbers \u2192 <code>float64<\/code> = decimal numbers \u2192 <code>byte<\/code> = raw data \u2192 <code>rune<\/code> = characters \u2192 <code>complex128<\/code> = complex mathematics.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Go has four main families of numeric types: The simplest way to remember them is: Type family Stores Example int Whole numbers, positive or negative -10, 0,&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1096","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1096","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/comments?post=1096"}],"version-history":[{"count":1,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1096\/revisions"}],"predecessor-version":[{"id":1097,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/posts\/1096\/revisions\/1097"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/media?parent=1096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/categories?post=1096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/tutorials\/wp-json\/wp\/v2\/tags?post=1096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}