-- Go

Go ile JSON İşlemleri

Merhaba Gopher kardeşler,

Bu makalemde Go ile uzun uzun type nesnesi, metodlar ve JSON işlemleri gerçekleştireceğiz. Temel prensipleri anlayabilmek için en temel işlemler gerçekleştirilmiştir.

Go ile bir JSON formatlı veri üretmek için öncelikle Go’nun nesne yapısını kurmamız gerekecek. C#, Java gibi dillerde aşina olan eş-dost için müjdemi vereyim; Go’da class yok, struct nesnesi var ve type ile struct tanımlayarak bir sınıf yapısı oluşturabiliyoruz. Class kullanımı ile çok benzer bir mantığa sahip olduğu için hiç Go bilmeyen arkadaşlar dahi rahatlıkla okuyabilecektir.

Bu genel yapıyı tanımladıktan sonra metodlarla bir çok ufak-tefek işlem gerçekleyeceğiz. Bunlar tamamen eliniz-gözünüz alışsın diye yapılan aparatif kodlamalar olacaktır.

Makaleyi uzatmamak için kod aralarına açıklamalar yazdım ve doğrudan kodu sizinle paylaşıyor olacağım.

package main

import (
    "fmt"
    "os"
    "encoding/json"
)

// Type Nesneleri

// Name struct'ını tanımlıyoruz.
type Name struct {
    Family string
    Personal string
}

// Email struct'ını tanımlıyoruz.
type Email struct {
    ID int
    Kind string
    Address string
}

// Interest struct'ını tanımlıyoruz.
type Interest struct {
    ID int
    Name string
}

// Yukarıdaki tüm nesneleri bir nesne olarak kendisinde barındıracak olan Person struct'ını tanımlıyoruz.
type Person struct {
    ID int
    FirstName string
    LastName string
    Username string
    Gender string
    Name Name
    Email []Email
    Interest []Interest
}

// Metodları Tanımlıyoruz

// Dışarıdan aldığı Person nesne pointer'ını alıp geriye string dönecek GetPerson metodu.
func GetPerson(p *Person) string{
    return p.FirstName + " " + p.LastName
}

// Dışarıdan aldığı Person nesne pointer'ı ve index bilgisini alıp geriye string olarak Email dönecek GetPersonEmailAddress metodu.
// Geriye string döner.
func GetPersonEmailAddress(p *Person, ind int) string{
    return p.Email[ind].Address
}

// Dışarıdan aldığı Person nesne pointer'ı ve index bilgisini alıp geriye string olarak Email dönecek GetPersonEmail metodu.
// Geriye Email struct tipinde nesne döner.
func GetPersonEmail(p *Person, ind int) Email{
    return p.Email[ind]
}

func WriteMessage(msg string){
    fmt.Println(msg)
}

func WriteStarLine(){
    fmt.Println("********************")
}

// Oluşturulan Person nesnesini parametre olarak alır ve JSON olarak kaydedecek metod.
func SaveJSON(fileName string, key interface{}) {

    outFile, err := os.Create(fileName)
    checkError(err)
    encoder := json.NewEncoder(outFile)
    err = encoder.Encode(key)
    checkError(err)
    outFile.Close()

}

func checkError(err error)  {
    if err != nil {
        fmt.Println("Fatal Error : ", err.Error())
        os.Exit(1)
    }
}

func main() {

    // JSON işlemleri için oluşturulan struct yapısının nesnesinin üretilmesi.
    person := Person{
                        ID: 7,
                        FirstName: "Cihan",
                        LastName: "Özhan",
                        Username: "CihanOzhan",
                        Gender: "true",
                        Name: Name {Family: "dijibil", Personal: "Cihan"},
                        Email: []Email {
                                        Email {ID: 1, Kind: "work", Address: "cihan@dijibil.com"},
                                        Email {ID: 2, Kind: "home", Address: "cihan.ozhan@hotmail.com"},
                        },
                        Interest: []Interest {
                            Interest {ID: 1, Name: "C#"},
                            Interest {ID: 2, Name: "GO"},
                            Interest {ID: 3, Name: "SQL Server"},
                            Interest {ID: 4, Name: "Oracle"},
                        },
                    }


    WriteMessage("Reading Operation Started.")

    WriteMessage("Personal Fullname")
    WriteStarLine()
    res := GetPerson(&person)
    WriteMessage(res)
    WriteStarLine()

    WriteMessage("\n")

    WriteMessage("Personal Email With Index")
    WriteStarLine()
    resEmail := GetPersonEmailAddress(&person, 0)
    WriteMessage(resEmail)
    WriteStarLine()

    WriteMessage("\n")

    WriteMessage("Personal Email Object With Index")
    WriteStarLine()
    resEmail2 := GetPersonEmail(&person, 0)
    fmt.Println(resEmail2)
    WriteStarLine()

    WriteMessage("Reading Operation Ended.")

    WriteMessage("\n")

    WriteMessage("Writing Operation Started.")

    SaveJSON("person.json", person)

    WriteMessage("Writing operation ended.")
}

Uygulamanın çıktısı olarak person.json dosyası oluşacaktır. Bunun içeriği de aşağıdaki gibidir;

{
    "ID":7,
    "FirstName":"Cihan",
    "LastName":"Özhan",
    "Username":"CihanOzhan",
    "Gender":"true",
    "Name":{
        "Family":"dijibil",
        "Personal":"Cihan"},
    "Email":[{
            "ID":1,
            "Kind":"work",
            "Address":"cihan@dijibil.com"
        },
        {
            "ID":2,
            "Kind":"home",
            "Address":"cihan.ozhan@hotmail.com"
        }],
    "Interest":[{
            "ID":1,
            "Name":"C#"
        },
        {
            "ID":2,
            "Name":"GO"
        },
        {
            "ID":3,
            "Name":"SQL Server"
        },
        {
            "ID":4,
            "Name":"Oracle"
        }]
}

Not : JSON çıktısı tek satır halinde kaydolacaktır. Yukarıdaki benim tarafımdan düzenlenmiş halidir.

İyi kodlamalar Gopher kardeşler!
Cihan Özhan

Yorumla

Yorum