Contoh: Aplikasi App Engine Go

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. Aplikasi ini berjalan secara lokal di penampung 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 diluncurkan, contoh kode akan membuat klien administratif untuk Bigtable. Kemudian, klien ini menggunakan klien untuk memeriksa instance Bigtable yang ditentukan pengguna untuk tabel bernama user-visit-counter, dengan satu grup kolom bernama emails. Jika perlu, tabel dan grup kolom akan dibuat:

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 kemudian membuat satu klien Bigtable yang digunakan untuk semua operasi baca dan tulis 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 meminta pengguna untuk login jika diperlukan. Kemudian, kode ini akan melacak kunjungan pengguna dengan melakukan operasi Increment pada 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 jumlah total kunjungan oleh pengguna saat ini.