Contoh: Aplikasi Go App Engine

Contoh ini adalah aplikasi App Engine, yang ditulis dalam Go, yang menyediakan antarmuka web yang menggunakan Bigtable untuk melacak jumlah kunjungan dari Akun Google Anda. Library ini berjalan secara lokal di container Docker atau di cloud di lingkungan fleksibel App Engine. Kode untuk aplikasi ini ada di repositori GitHub GoogleCloudPlatform/golang-samples, di direktori bigtable/usercounter.

Ringkasan contoh kode

Saat contoh kode diluncurkan, contoh kode ini akan membuat klien administratif untuk Bigtable. Selanjutnya, klien akan menggunakan klien untuk memeriksa instance Bigtable yang ditentukan pengguna untuk tabel bernama user-visit-counter, dengan satu grup kolom bernama emails. Jika perlu, akan dibuat tabel dan kelompok kolom:

adminClient, err := bigtable.NewAdminClient(ctx, project, instance)
if err != nil {
	log.Fatalf("Unable to create a table admin client. %v", err)
}
tables, err := adminClient.Tables(ctx)
if err != nil {
	log.Fatalf("Unable to fetch table list. %v", err)
}
if !sliceContains(tables, tableName) {
	if err := adminClient.CreateTable(ctx, tableName); err != nil {
		log.Fatalf("Unable to create table: %v. %v", tableName, err)
	}
}
tblInfo, err := adminClient.TableInfo(ctx, tableName)
if err != nil {
	log.Fatalf("Unable to read info for table: %v. %v", tableName, err)
}
if !sliceContains(tblInfo.Families, familyName) {
	if err := adminClient.CreateColumnFamily(ctx, tableName, familyName); err != nil {
		log.Fatalf("Unable to create column family: %v. %v", familyName, err)
	}
}
adminClient.Close()

Contoh kode tersebut kemudian membuat satu klien Bigtable yang digunakan untuk semua pembacaan dan penulisan berikutnya:

client, err = bigtable.NewClient(ctx, project, instance)
if err != nil {
	log.Fatalf("Unable to create data operations client. %v", err)
}

Terakhir, contoh kode menambahkan pengendali HTTP ke root server App Engine. Pada setiap permintaan, pengendali akan meminta pengguna untuk login jika diperlukan. Selanjutnya, sistem akan melacak kunjungan pengguna dengan melakukan operasi Increment di baris untuk alamat email pengguna:

tbl := client.Open(tableName)
rmw := bigtable.NewReadModifyWrite()
rmw.Increment(familyName, u.Email, 1)
row, err := tbl.ApplyReadModifyWrite(ctx, u.Email, rmw)
if err != nil {
	return &appError{err, "Error applying ReadModifyWrite to row: " + u.Email, http.StatusInternalServerError}
}

Setelah menambahkan baris, pengendali akan menampilkan halaman HTML yang menunjukkan total jumlah kunjungan oleh pengguna saat ini.