-- Go

Go ile Metot ve İç İçe Struct Kullanımı

Merhabalar,

Go’ın güzel yanlarından biri metot ve fonksiyon yapılarının farklı amaçlar için genişletilmiş şekilde kullanılmasıdır. Bu makalemde metot konusu üzerine duracağım.

Go da metotları bir struct’ın iş parçacığı olarak kullanabileceğiniz gibi, ‘constructor method’  oluşturma amacıyla da kullanabilirsiniz. Farklı bir modern programlama üzerine kod yazdıysanız buradaki metot yapısı da size yabancı gelmeyecektir.

Go resmi sitesinden temel metot kullanımını inceleyebilirsiniz

Şimdi örneğimize geçebiliriz.

Örneğimde bir User struct’ı, içerisinde de Payment tipinde farklı bir struct daha kullanıyorum. Bu genel olarak programlama yaparken karşılaşabileceğiniz bir senaryodur. Bu iki struct için de birer constructor yapısı oluşturuyorum. Sonrasında User struct’ı için bir kaç metot tanımlayarak örneği kullanmaya başlıyoruz. Örnek kullanımını da iki farklı yöntemle gerçekleştiriyoruz. İlk kullanım, başlangıç değer atama yöntemiyle oluşturma, diğeriyse nesne oluşturma yöntemiyle oluşturmayı içerir.

package main

import (
	"fmt"
	"strconv"
)

func main() {

	// User creation v1

	fmt.Println("User creation v1")

	user1 := &User{
		ID:        1,
		FirstName: "Cihan",
		LastName:  "Özhan",
		UserName:  "CihanOzhan",
		Age:       28,
		Pay: &Payment{
			Salary: 2.550,
			Bonus:  700,
		},
	}

	// fmt.Println(user1.Pay)
	fmt.Println(user1.GetUserName())
	fmt.Println(user1.GetFullName())
	fmt.Println("Maaş : " + strconv.FormatFloat(user1.GetPayment(), 'g', -1, 64))
	// Not : Maaşı gösterebilmek için float64 veri tipini string'e dönüştürdük.

	fmt.Println("\n")

	// User creation v2

	fmt.Println("User creation v2")

	user2 := NewUser()
	user2.FirstName = "Cihan"
	user2.LastName = "Özhan"
	user2.Age = 28
	user2.UserName = "GODER"

	// Payment creation v1

	// user2.Pay.Salary = 65
	// user2.Pay.Bonus = 323

	// Payment creation v2

	user2.Pay = &Payment{Salary: 765, Bonus: 495}
	fmt.Println(user2.Pay)
	fmt.Println(user2.GetUserName())
	fmt.Println(user2.GetFullName())
	fmt.Println("Maaş : " + strconv.FormatFloat(user2.GetPayment(), 'g', -1, 64))
	// Not : Maaşı gösterebilmek için float64 veri tipini string'e dönüştürdük.
}

type User struct {
	ID        int
	FirstName string
	LastName  string
	UserName  string
	Age       int
	Pay       *Payment
}

// User constructor
func NewUser() *User {
	u := new(User)
	u.Pay = NewPayment()
	return u
}

type Payment struct {
	Salary float64
	Bonus  float64
}

// Payment constructor
func NewPayment() *Payment {
	p := new(Payment)
	return p
}

func (u User) GetFullName() string {
	return u.FirstName + " " + u.LastName
}

func (u *User) GetUserName() string {
	return u.UserName
}

func (u *User) GetPayment() float64 {
	pay := u.Pay.Salary + u.Pay.Bonus
	return pay
}

golang-metod

 

 

 

 

 

İyi çalışmalar.
Cihan Özhan

Yorumla

Yorum