Golang ve Mobil Uygulama Desteği

Yine başlık bulmakta zorlandığım yazılardan biriyle daha karşınızdayım. Bu yazımızda go ile yazdığımız/yazılmış bir paket var ise bunu ios ve android uygulamalarımızda nasıl kullanacağımıza bakacağız. Ben kendi projelerimden biri için mahmut diye bir encryption paketi yazmıştım. Server-side encrypt ettiğim bir veriyi, client-side decrypt etmem lazımdı, go’nun mobil desteğini test etmek istiyordum ve beklediğim fırsat gelmişti. Go’nun mobil desteği şuanda stabil olmamasına rağmen ben bir sorun yaşamadım ve gayet başarılı çalıştığını söyleyebilirim.


Go mobile projesinde aktif olarak rol alan Burcu Dogan‘a teşekkür ederim. Bence inanılmaz bir iş başarıyor.


Go mobile’ın oldukça yalın ve anlaşılır bir wiki sayfası var. Yüklemek için şu komutu çalıştırmanız yeterli:

$ go get golang.org/x/mobile/cmd/gomobile

Yüklemeyi bitirdikten sonra ise şu komutu çalıştırıyoruz:

$ gomobile init

Bu komut biraz zaman alabilir, işlem bittiğinde artık mobil desteğini kullanabilir halde oluyoruz.

Kullanmak istediğimiz go paketi neredeyse terminalden o klasöre gidelim. Benim paketim için şöyle:

$ cd go/src/github.com/melihmucuk/mahmut

Şimdide ios için mahmut paketini derleyelim. Bu bize, ios uygulamaları geliştirmeye aşina olanların da bildiği, bir framework çıkartıyor. Şu komutu yazalım:

$ gomobile bind-target=ios github.com/melihmucuk/mahmut

Şimdi klasörümüzü kontrol edelim. Framework dosyamız oluşmuş olması lazım.

Böyle bir çıktı görmeniz gerekiyor. Şimdi Xcode u açıp herhangi bir projeye framework dosyamızı ekleyelim. Sürekle bırak ile ekleyebilirsiniz, ancak kopyalarken “Copy items if needed” seçeneğini seçmeyi unutmayın.

Ekledikten sonra artık kullanıma hazır hale geldi. Bir bakalım framework dosyamızın içinde neler var.

Benim yazmış olduğum pakette 2 fonksiyon vardı, Bagla ve Coz isimli iki fonksiyonumuz oluşturulmuş. Go birden fazla değeri return edebiliyor ancak ios için derlediğimizde döneceği değerler birden fazla olduğu için fonksiyonlara parametre olarak vermemiz gerekiyor. Hem inputlar hem outputları parametre olarak vereceğiz. AppDelegate içinde bir test edelim.

Öncelikle paketimizi import etmemiz lazım.

#import "AppDelegate.h"
#import "mahmut/Mahmut.h"

Daha sonra ise aşağıdaki kodları yazıp test edelim.

NSString *encyrptedText;
NSError *err;
BOOL okBagla = GoMahmutBagla(@"*16,24,32KarakterUzunlugundaKey*", @"mahmut sıkı bağla da düşmeyelim yeğenim", &encyrptedText, &err);

if (!okBagla) {
NSLog(err.localizedDescription);
}else{
NSLog(encyrptedText);
}

NSString *plainText;
BOOL okCoz = GoMahmutCoz(@"*16,24,32KarakterUzunlugundaKey*", encyrptedText, &plainText, &err);

if (!okCoz) {
NSLog(err.localizedDescription);
}else{
NSLog(plainText);
}

Bu kodun çıktısı ise aşağıdaki gibi olacak.

Key uzunluğumuz 16, 24 ya da 32 karakter uzunluğunda olmalı yoksa hata verir. Sağ alt köşede gördüğünüz üzere verdiğimiz yazının encrypt edilmiş daha sonra ise decrypt edilmiş halini görüyoruz. Key uzunluğu ile oynayıp hata alalım birde.

Hata aldık, bunuda logladık. Hepsi bu kadar.

Toparlamak gerekirse, go ile yazdığımız paketleri server-client arasında paylaşabiliyor olmak development sürecini ciddi ölçüde kısaltabilir. Go’nun geldiği ve gideceği nokta beni oldukça heyecanlandırıyor. Herhangi bir sorun yaşarsanız lütfen bu yazıya yorum yazın, yeni yazılardan haberdar olmak için blogumu ziyaret edipBloga E-Posta İle Abone Ol” bölümünden abone olabilir, beni Twitter’dan takip edebilirsiniz.


Originally published at melihmucuk.com on December 17, 2015.

Show your support

Clapping shows how much you appreciated Melih Mucuk’s story.