Goder

Sample [TR] : GOLang ile JSON İşlemleri

Introduction

Cihan Özhan

Cihan Özhan

Hakkımda bilgi içeren blog sayfam; http://www.cihanozhan.com/cihan-ozhan/


LATEST POSTS

Sample [TR] : GOLang ile Inheritance ve Interface Kullanımı 31st October, 2016

Sample [TR] : GOLang ile Metot ve İç İçe Struct Kullanımı 30th October, 2016

Sample

Sample [TR] : GOLang ile JSON İşlemleri

Posted on .

Merhaba GOpher kardeşler,

Bu makalemde GOLang 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.

GOLang 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.

Kaynak : http://www.cihanozhan.com/golang-ile-json-islemleri

Cihan Özhan

Cihan Özhan

http://www.cihanozhan.com

Hakkımda bilgi içeren blog sayfam; http://www.cihanozhan.com/cihan-ozhan/

There are no comments.

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (0) ...
Navigation