1 Pengenalan tentang Tipe Data Bahasa Go
Dalam bahasa Go, tipe data merupakan dasar pemrograman yang menentukan bentuk data yang dapat disimpan oleh variabel. Tipe data dasar yang disediakan oleh bahasa Go terbagi menjadi kategori berikut:
Tipe Data | Deskripsi | Penggunaan Memori |
---|---|---|
bool | Tipe boolean, digunakan untuk menyimpan benar atau salah | 1 byte |
int, uint | Integer bertanda dan tak bertanda, ukuran default bergantung pada platform sistem | 4 atau 8 byte |
int8, uint8 | Integer bertanda dan tak bertanda 8-bit | 1 byte |
int16, uint16 | Integer bertanda dan tak bertanda 16-bit | 2 byte |
int32, uint32 | Integer bertanda dan tak bertanda 32-bit | 4 byte |
int64, uint64 | Integer bertanda dan tak bertanda 64-bit | 8 byte |
float32 | Angka floating point 32-bit | 4 byte |
float64 | Angka floating point 64-bit | 8 byte |
complex64 | Bilangan kompleks dengan bagian real dan imajiner 32-bit | 8 byte |
complex128 | Bilangan kompleks dengan bagian real dan imajiner 64-bit | 16 byte |
byte | Mirip dengan uint8 | 1 byte |
rune | Mirip dengan int32, mewakili titik kode Unicode | 4 byte |
string | Tipe string | Bergantung pada panjang string |
error | Antarmuka error, digunakan untuk mengembalikan informasi error | Tidak ada ukuran tetap |
Tipe-tipe ini dapat dipilih sesuai dengan kebutuhan berbeda, seperti perhitungan numerik, pemrosesan teks, atau pengendalian logis.
2 Tipe Data Integer
2.1 Tinjauan Tipe Integer
Bahasa Go memiliki multiple tipe data integer bawaan, yang diklasifikasikan sebagai berikut:
- Integer bertanda:
int8
,int16
,int32
(ataurune
),int64
, danint
- Integer tak bertanda:
uint8
(ataubyte
),uint16
,uint32
,uint64
, danuint
Ukuran int
dan uint
adalah 4 byte pada sistem 32-bit dan 8 byte pada sistem 64-bit. Rentang nilai dari tipe data integer ditunjukkan dalam tabel berikut:
Tipe | Rentang Nilai |
---|---|
int8 | -128 hingga 127 |
uint8 | 0 hingga 255 |
int16 | -32768 hingga 32767 |
uint16 | 0 hingga 65535 |
int32 | -2147483648 hingga 2147483647 |
uint32 | 0 hingga 4294967295 |
int64 | -9223372036854775808 hingga 9223372036854775807 |
uint64 | 0 hingga 18446744073709551615 |
2.2 Penggunaan Variabel Integer
Sintaks dasar untuk mendeklarasikan variabel integer adalah sebagai berikut:
var nama_variabel tipe_data = nilai_awal
Contoh kode:
package main
import "fmt"
func main() {
var a int = 10 // Variabel integer bertanda
var b uint = 20 // Variabel integer tak bertanda
var c int8 = -128 // Nilai int8 terkecil
fmt.Println(a, b, c)
}
2.3 Operasi Integer
Bahasa Go mendukung operator aritmatika umum, seperti penambahan (+
), pengurangan (-
), perkalian (*
), pembagian (/
), dan modulo (%
), serta operator bitwise seperti bitwise AND (&
), OR (|
), XOR (^
), pergeseran kiri (<<
), dan pergeseran kanan (>>
).
package main
import "fmt"
func main() {
x := 10
y := 3
// Operasi aritmatika
fmt.Println(x + y) // Penambahan
fmt.Println(x - y) // Pengurangan
fmt.Println(x * y) // Perkalian
fmt.Println(x / y) // Pembagian
fmt.Println(x % y) // Modulo
// Operasi bitwise
fmt.Println(x & y) // Bitwise AND
fmt.Println(x | y) // Bitwise OR
fmt.Println(x ^ y) // Bitwise XOR
fmt.Println(x << 1) // Pergeseran kiri sebanyak 1
fmt.Println(x >> 1) // Pergeseran kanan sebanyak 1
}
3 Tipe Data Floating Point
3.1 Gambaran Umum Jenis Data Floating Point
Pada bahasa Go, tipe floating-point mencakup float32
dan float64
, yang masing-masing merupakan data floating-point 32-bit dan 64-bit. Secara umum, disarankan untuk menggunakan float64
karena tipe ini menyediakan rentang yang lebih besar dan presisi yang lebih akurat.
-
float32
memiliki sekitar 23 bit signifikan, memberikan sekitar 7 digit desimal presisi. -
float64
memiliki sekitar 52 bit signifikan, memberikan sekitar 16 digit desimal presisi.
3.2 Penggunaan Variabel Floating Point
Variabel floating-point dapat dideklarasikan dengan langsung memberikan literal atau menggunakan kata kunci var
:
package main
import "fmt"
func main() {
var f1 float32 = 3.14 // Secara eksplisit menentukan tipe float32
f2 := 3.14 // Ditentukan secara otomatis sebagai tipe float64
fmt.Println(f1, f2)
}
3.3 Aritmetika Floating Point dan Masalah yang Terjadi
Aritmetika floating-point dapat menyebabkan kehilangan presisi. Melakukan operasi dengan presisi yang sangat tinggi adalah masalah umum, terutama saat mengurangkan dua angka yang sangat dekat.
package main
import "fmt"
func main() {
f1 := .1
f2 := .2
f3 := f1 + f2
fmt.Println(f3) // Output mungkin bukan .3 yang diharapkan karena masalah presisi
// Memperbaiki masalah presisi menggunakan output yang diformat
fmt.Printf("%.1f\n", f3) // Output diperbaiki menjadi .3
}
4 Tipe Data Boolean
4.1 Gambaran Umum Tipe Data Boolean
Boolean adalah tipe data paling sederhana, dan hanya dapat memiliki dua nilai: true
(benar) dan false
(salah). Tipe data ini memiliki posisi yang sangat penting dalam pernyataan kondisional dan struktur kontrol perulangan.
4.2 Penggunaan Variabel Boolean
Deklarasi dan penggunaan variabel boolean:
package main
import "fmt"
func main() {
var sukses bool = true
var gagal bool = false
fmt.Println("Operasi berhasil:", sukses)
fmt.Println("Operasi gagal:", gagal)
}
Nilai boolean sering digunakan dalam pernyataan kondisional:
package main
import "fmt"
func main() {
a := 10
b := 20
fmt.Println("a == b:", a == b) // false
fmt.Println("a < b:", a < b) // true
}
5 Tipe Data String
5.1 Gambaran Umum String
Sebuah string merupakan kumpulan karakter. Dalam bahasa Go, string bersifat tidak dapat diubah. Setiap string terdiri dari dua bagian: sebuah pointer ke susunan byte yang mendasarinya dan sebuah panjang. String dapat berisi data apa pun, termasuk byte.
5.2 Penggunaan Variabel String
Variabel string biasanya dideklarasikan menggunakan tanda kutip ganda "
untuk membuat, namun Anda juga dapat menggunakan tanda kutip balik ``` untuk membuat string multi-baris:
package main
import "fmt"
func main() {
var s1 string = "hello"
s2 := "world"
s3 := `Ini adalah
string beberapa
baris`
fmt.Println(s1)
fmt.Println(s2)
fmt.Println(s3)
}
Setelah sebuah string dibuat, kontennya tidak dapat diubah. Operasi berikut tidak sah dan akan mengakibatkan kesalahan kompilasi:
s := "hello"
s[] = 'H` // Kesalahan kompilasi: konten string bersifat tidak dapat diubah
5.3 Operasi String
String sangat umum dan penting dalam pemrograman. Bahasa Go menyediakan serangkaian fungsi bawaan yang kaya untuk memanipulasi string. Berikut adalah beberapa operasi yang sering digunakan.
5.3.1 Penggabungan String
Dalam bahasa Go, Anda dapat menggunakan operator tanda tambah (+
) untuk menggabungkan string, yang merupakan metode paling langsung. Selain itu, saat menangani penggabungan string yang sering, disarankan untuk menggunakan strings.Builder
untuk kinerja yang lebih baik.
package main
import (
"fmt"
"strings"
)
func main() {
// Menggabungkan string menggunakan +
halo := "Halo, "
dunia := "Dunia!"
hasil := halo + dunia
fmt.Println(hasil) // Output: Halo, Dunia!
// Menggabungkan string menggunakan strings.Builder
var sb strings.Builder
sb.WriteString("Halo, ")
sb.WriteString("Dunia!")
fmt.Println(sb.String()) // Output: Halo, Dunia!
}
5.3.2 Memisahkan String
Memisahkan string dapat dilakukan menggunakan fungsi strings.Split
, yang memisahkan string menjadi potongan-potongan berdasarkan delimiter yang ditentukan.
package main
import (
"fmt"
"strings"
)
func main() {
// Mendefinisikan sebuah string
kalimat := "Go adalah bahasa pemrograman open source"
// Memisahkan string berdasarkan spasi
kataKata := strings.Split(kalimat, " ")
for _, kata := range kataKata {
fmt.Printf("%s\n", kata)
}
// Output:
// Go
// adalah
// bahasa
// pemrograman
// open
// source
}
5.3.3 Akses Indeks
Dalam Go, sebuah string merupakan urutan byte yang tidak dapat diubah. Anda dapat menggunakan indeks untuk mengakses byte khusus dalam sebuah string. Namun, perlu diingat bahwa karena sebuah string dapat berisi karakter-karakter multi-byte (seperti karakter-karakter yang dienkripsi dalam bentuk UTF-8), pengindeksan secara langsung mungkin tidak menghasilkan satu karakter yang diharapkan.
package main
import "fmt"
func main() {
s := "Hello, 世界"
for i := range s {
fmt.Printf("%d: %x\n", i, s[i])
}
// Catatan: ini akan menghasilkan representasi heksadesimal dari byte, bukan karakter
}
Untuk mengiterasi melalui string per karakter, Anda dapat menggunakan perulangan dengan range
.
package main
import "fmt"
func main() {
s := "Hello, 世界"
for indeks, nilaiRune := range s {
fmt.Printf("%d: %U '%c'\n", indeks, nilaiRune, nilaiRune)
}
// Output: indeks, enkoding Unicode, dan karakter itu sendiri untuk setiap karakter
}
5.3.4 Mendapatkan Panjang
Fungsi len
dapat memperoleh panjang dari sebuah string, yaitu panjang dari urutan byte yang mendasarinya. Untuk string UTF-8, jika Anda perlu memperoleh jumlah karakter (rune), Anda sebaiknya menggunakan fungsi utf8.RuneCountInString
. Hal ini dapat menangani dengan benar karakter-karakter multi-byte.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
s := "Hello, 世界"
fmt.Println("Panjang byte:", len(s)) // Output panjang byte
fmt.Println("Panjang karakter:", utf8.RuneCountInString(s)) // Output panjang karakter
}
Dari contoh di atas, kita dapat melihat bahwa bahasa Go menyediakan fungsi pustaka yang kaya untuk operasi-operasi string, sehingga mudah untuk menyelesaikan berbagai tugas pemrosesan string. Ketika melakukan pengkodean, penting untuk memperhatikan perbedaan antara byte dan karakter, terutama saat berurusan dengan set karakter non-ASCII.