> For the complete documentation index, see [llms.txt](https://davidwinalda94.gitbook.io/mastering-golang/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://davidwinalda94.gitbook.io/mastering-golang/type-conversion.md).

# Type Conversion

Pada sesi ini akan dibahas bagaimana cara mengkonversi suatu tipe data ke tipe data lain

Pada saat membuat suatu aplikasi, ada suatu momen dimana kita butuh mengkonversi suatu tipe data ke tipe data lain misalnya kita ingin menampilkan nilai desimal (float) dari suatu variabel yang tipe datanya adalah bilangan non desimal (integer).

### Converting Number Types

Seperti yang sudah dibahas pada sesi [Tipe Data](/mastering-golang/tipe-data.md) dimana pada Go terdapat 2 tipe data numerik yaitu integer dan floating numbers.

#### Converting between integer types

Pada integer terdapat beberapa tipe lagi seperti `int` , `int8` , `int16` , `int32` , dan `int64` . Berikut ini tabel range nilai yang membedakan dari beberapa tipe integer di atas:

| Tipe Data | Nilai Minimum        | Nilai Maksimum      |
| --------- | -------------------- | ------------------- |
| int8      | -128                 | 127                 |
| int16     | -32768               | 32767               |
| int32     | -2147483648          | 2147483647          |
| int64     | -9223372036854775808 | 9223372036854775807 |

Pada contoh di bawah ini kita akan menggunakan `int8` untuk mendeklarasikan variabel dan nilai yang dapat ditampung:

![Menggunakan tipe data int8 dan memasukkan nilai 100](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2bTTDuEXbe1TUOr_0%2FScreen%20Shot%202021-01-27%20at%2018.31.15.png?alt=media\&token=3fb4b805-e4b8-4355-abd5-8b54ebdc5573)

![Output program berjalan karena masih pada range yang tersedia pada int8](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2bd4acxOba_KifUtW%2FScreen%20Shot%202021-01-27%20at%2018.31.31.png?alt=media\&token=d6978865-1734-4db4-9ecb-f3cc93d4f701)

Lalu bagaimana jika nilai variabel melebihi kapasitas range dari `int8` ?

![Menggunakan tipe data int8 dan memasukkan nilai 129](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2brTGqnilRWh4dk4U%2FScreen%20Shot%202021-01-27%20at%2018.30.25.png?alt=media\&token=0e11945c-666a-489e-bf70-eeb5c26beeb5)

![Error pada output program karena nilai variabel melebihi range tipe data int8](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2bzpxTfLUPCv4wzsq%2FScreen%20Shot%202021-01-27%20at%2018.30.51.png?alt=media\&token=dc089957-121d-4a57-9597-dc054a77d488)

Kita bisa melihat bahwa akan muncul error pada output program jika nilai suatu variabel melebihi range nilai yang ditentukan.

Pada GO, untuk mengkonversi sebuah nilai menggunakan statement `T(v)` dimana `T` adalah tipe data dan `v` adalah nilai yang ingin dikonversikan.

{% hint style="info" %}
`T(v)`

`T` : Tipe data

`v` : Nilai
{% endhint %}

Kita dapat melakukan konversi antar tipe integer seperti ini:

![Konversi variabel index dari tipe data int8 menjadi tipe data int32](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2dU5eGgpppX8xOXh6%2FScreen%20Shot%202021-01-27%20at%2018.41.06.png?alt=media\&token=3af5738d-9e7b-43de-8742-df7d4937d2f6)

![Output program menampilkan nilai dari variabel dan tipe datanya](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2dnjQLrv4NcneILA7%2FScreen%20Shot%202021-01-27%20at%2018.42.34.png?alt=media\&token=01afe801-0b0b-4d79-9936-87d672ce780d)

Untuk melihat tipe data yang digunakan pada suatu variabel kita dapat menggunakan `fmt.Printf()` dan `T` verbs. `\n` digunakan untuk membuat baris baru. Detail tentang `fmt.Printf()` akan kita bahas pada sesi lainnya.

#### Converting integer to float

Kita dapat melakukan konversi dari Integer ke Float dengan cara seperti berikut ini:

![Konversi integer ke dalam float](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2jIlme3jxOslJ_pD8%2FScreen%20Shot%202021-01-27%20at%2019.06.38.png?alt=media\&token=cedbea43-8d3b-4a5f-bc25-c234263caa54)

![Output hasil konversi integer ke dalam float](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2jPq1aST9T7MW8avZ%2FScreen%20Shot%202021-01-27%20at%2019.05.57.png?alt=media\&token=b8b22543-e5f4-47d9-b347-18bfeae8fbda)

Pada kode di atas kita kembali menggunakan `fmt.Printf()` dengan `%.2f` untuk membuat nilai presisi pada desimal. Nilai `%.2f` bisa kita ganti menyesuaikan kebutuhan kita ingin menggunakan berapa banyak angka di belakang koma misalnya `%.3f` berarti outputnya akan menjadi `26.000` .

Mungkin kamu bertanya bagaimana jika menggunakan `fmt.Println()` ? Sayangnya kita tidak bisa menampilkan nilai desimal hasil konversi jika menggunakan `fmt.Println()` walaupun sebenarnya tipe datanya sudah berubah menjadi `float64` .

![](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2jwKVbvAA5kmOfyzt%2FScreen%20Shot%202021-01-27%20at%2019.09.22.png?alt=media\&token=b6ea424d-d8ed-4045-a591-088a6aa094b9)

![Data type sudah berhasil dikonversikan namun tidak bisa menggunakan fmt.Println()](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2k7OkV3d6Bb_j4C7E%2FScreen%20Shot%202021-01-27%20at%2019.10.05.png?alt=media\&token=77be5d6b-a20c-428f-b476-e5a407274f44)

#### Converting float to integer

Kita dapat melakukan konversi nilai Float ke dalam Integer seperti berikut ini:

![Konversi nilai Float ke dalam Integer](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2lwEFgXlmQA13VCAU%2FScreen%20Shot%202021-01-27%20at%2019.18.08.png?alt=media\&token=88652606-a224-4371-a1ed-790c055db552)

![Output hasil konversi nilai Float ke dalam Integer](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2XzS_csEz-DGwHYHx%2F-MS2m9BMvqLa2H2iqtF1%2FScreen%20Shot%202021-01-27%20at%2019.19.03.png?alt=media\&token=958c77a1-470c-4788-a260-f64e9d6b4d86)

> Konversi Float ke dalam Integer akan memangkas nilai desimal tanpa mengukur presisi nilainya. Jadi jika ada nilai float `26.9` yang sebenarnya mendekati nilai `30` jika digenapi, hal ini tidak berlaku pada konversi.

#### Numbers Converted Through Division <a href="#numbers-converted-through-division" id="numbers-converted-through-division"></a>

Saat melakukan operasi numerik dua nilai Integer maka output yang didapatkan juga bernilai  Integer.

![Melakukan operasi pembagian](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2tvyHsxU3G5yDvjMs%2FScreen%20Shot%202021-01-27%20at%2019.52.23.png?alt=media\&token=56a17bd0-07d9-4df9-8920-b6bd77a04b17)

![Output program menghasilkan nilai Integer](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2u0uCCOfJjFYvATyG%2FScreen%20Shot%202021-01-27%20at%2019.52.39.png?alt=media\&token=a552fd0a-dbfe-4de1-b68f-079bef0342e5)

Namun jika melakukan operasi nilai Integer dan Float, maka tipe data dari hasil operasi tersebut akan menjadi Float.

![Melakukan operasi pembagian nilai Float dan Integer](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2uTdVjTfue29g-tyw%2FScreen%20Shot%202021-01-27%20at%2019.55.11.png?alt=media\&token=0ca48a40-d6dc-4995-a8ab-06fe1ba012de)

![Output program menghasilkan nilai float64](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2u_KYaj7Q3O70U4tv%2FScreen%20Shot%202021-01-27%20at%2019.55.26.png?alt=media\&token=0243c9d5-b446-4991-86ba-dbedfd7d871f)

### Converting with String

Untuk melakukan konversi pada `string` , Go meminta kita untuk menggunakan Internal Package [strconv](https://golang.org/pkg/strconv/). Function yang biasa digunakan yaitu `Atoi` (string to int) dan `Itoa` (int to string). Contoh di bawah ini kita melakukan konversi dari nilai Integer ke dalam String:

![Konversi nilai Integer ke dalam String](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2x1Iv3owp77p2NXC_%2FScreen%20Shot%202021-01-27%20at%2020.06.08.png?alt=media\&token=f592a4c8-0493-4f57-8090-e356ad767446)

![Output program sudah berhasil melakukan konversi](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2x7SC5hL7f134w1CC%2FScreen%20Shot%202021-01-27%20at%2020.06.24.png?alt=media\&token=f0b4d417-a005-4eab-aa86-39d0403410ec)

Contoh di bawah ini jika kita melakukan konversi dari nilai String ke dalam Integer:

![Konversi nilai String ke dalam Integer](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2ytOsh68HW3NTEewQ%2FScreen%20Shot%202021-01-27%20at%2020.14.38.png?alt=media\&token=9161dd3c-88f4-44b1-9a84-f8fe55a87634)

![Output program konversi nilai String ke dalam Integer](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS2z5k9VIAqq9LeuWj8%2FScreen%20Shot%202021-01-27%20at%2020.15.40.png?alt=media\&token=418cd6fd-4671-47aa-b1d0-1945c1d68205)

> Pada konversi **String** ke dalam **Integer** kita harus menambahkan variabel `err` dan juga melakukan **kondisi pengecekan** apakah nilai pada **String** yang ingin dikonversikan bernilai **numerik** atau **teks**. Jika numerik maka tidak akan terjadi error namun jika teks maka akan muncul **Log** error dan program akan berhenti.

Contoh jika nilai String yang ingin dikonversikan berisikan sebuah teks:

![Nilai dari age berisikan sebuah teks](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS3-Cww8zEFtVABgsjn%2FScreen%20Shot%202021-01-27%20at%2020.20.30.png?alt=media\&token=c844dd02-b2ae-4455-8c19-77bb88059d25)

![Program error dan akan berhenti](https://2969676661-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MQaVepPFjuLoNjbs6f8%2F-MS2mfzE-pztkla0eRAR%2F-MS3-M8xYoCmYdwDVxku%2FScreen%20Shot%202021-01-27%20at%2020.21.00.png?alt=media\&token=4ca32fc4-f2a2-45f8-9c8e-bcf7e5a4c425)
