Git - Yapılar

Go dizileri, aynı türden birkaç veri öğesini tutabilen değişkenleri tanımlamanıza olanak tanır. Structure Go programlamasında bulunan ve farklı türlerdeki veri öğelerini birleştirmenize olanak tanıyan kullanıcı tanımlı başka bir veri türüdür.

Yapılar bir kaydı temsil etmek için kullanılır. Bir kütüphanedeki kitapları takip etmek istediğinizi varsayalım. Her kitabın aşağıdaki özniteliklerini izlemek isteyebilirsiniz -

  • Title
  • Author
  • Subject
  • Kitap kimliği

Böyle bir senaryoda yapılar oldukça kullanışlıdır.

Bir Yapının Tanımlanması

Bir yapı tanımlamak için kullanmalısınız type ve structifadeler. Struct deyimi, programınız için birden çok üye içeren yeni bir veri türünü tanımlar. Type deyimi, bizim durumumuzda struct olan türle bir adı bağlar. Struct ifadesinin biçimi aşağıdaki gibidir -

type struct_variable_type struct {
   member definition;
   member definition;
   ...
   member definition;
}

Bir yapı türü tanımlandıktan sonra, aşağıdaki sözdizimi kullanılarak bu türdeki değişkenleri bildirmek için kullanılabilir.

variable_name := structure_variable_type {value1, value2...valuen}

Yapı Üyelerine Erişim

Bir yapının herhangi bir üyesine erişmek için, member access operator (.).Üye erişim operatörü, yapı değişkeni adı ile erişmek istediğimiz yapı üyesi arasında bir süre olarak kodlanır. Kullanırdınstructyapı tipindeki değişkenleri tanımlamak için anahtar kelime. Aşağıdaki örnek bir yapının nasıl kullanılacağını açıklamaktadır -

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {
   var Book1 Books    /* Declare Book1 of type Book */
   var Book2 Books    /* Declare Book2 of type Book */
 
   /* book 1 specification */
   Book1.title = "Go Programming"
   Book1.author = "Mahesh Kumar"
   Book1.subject = "Go Programming Tutorial"
   Book1.book_id = 6495407

   /* book 2 specification */
   Book2.title = "Telecom Billing"
   Book2.author = "Zara Ali"
   Book2.subject = "Telecom Billing Tutorial"
   Book2.book_id = 6495700
 
   /* print Book1 info */
   fmt.Printf( "Book 1 title : %s\n", Book1.title)
   fmt.Printf( "Book 1 author : %s\n", Book1.author)
   fmt.Printf( "Book 1 subject : %s\n", Book1.subject)
   fmt.Printf( "Book 1 book_id : %d\n", Book1.book_id)

   /* print Book2 info */
   fmt.Printf( "Book 2 title : %s\n", Book2.title)
   fmt.Printf( "Book 2 author : %s\n", Book2.author)
   fmt.Printf( "Book 2 subject : %s\n", Book2.subject)
   fmt.Printf( "Book 2 book_id : %d\n", Book2.book_id)
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Book 1 title      : Go Programming
Book 1 author     : Mahesh Kumar
Book 1 subject    : Go Programming Tutorial
Book 1 book_id    : 6495407
Book 2 title      : Telecom Billing
Book 2 author     : Zara Ali
Book 2 subject    : Telecom Billing Tutorial
Book 2 book_id    : 6495700

Fonksiyon Bağımsız Değişkenleri Olarak Yapılar

Bir yapıyı, başka bir değişken veya işaretçi ilettiğinizde çok benzer bir şekilde işlev bağımsız değişkeni olarak iletebilirsiniz. Yapı değişkenlerine yukarıdaki örnekte yaptığınız gibi erişirsiniz -

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {
   var Book1 Books    /* Declare Book1 of type Book */
   var Book2 Books    /* Declare Book2 of type Book */
 
   /* book 1 specification */
   Book1.title = "Go Programming"
   Book1.author = "Mahesh Kumar"
   Book1.subject = "Go Programming Tutorial"
   Book1.book_id = 6495407

   /* book 2 specification */
   Book2.title = "Telecom Billing"
   Book2.author = "Zara Ali"
   Book2.subject = "Telecom Billing Tutorial"
   Book2.book_id = 6495700
 
   /* print Book1 info */
   printBook(Book1)

   /* print Book2 info */
   printBook(Book2)
}
func printBook( book Books ) {
   fmt.Printf( "Book title : %s\n", book.title);
   fmt.Printf( "Book author : %s\n", book.author);
   fmt.Printf( "Book subject : %s\n", book.subject);
   fmt.Printf( "Book book_id : %d\n", book.book_id);
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Book title     : Go Programming
Book author    : Mahesh Kumar
Book subject   : Go Programming Tutorial
Book book_id   : 6495407
Book title     : Telecom Billing
Book author    : Zara Ali
Book subject   : Telecom Billing Tutorial
Book book_id   : 6495700

Yapılara İşaretçiler

İşaretçileri, başka bir değişkene göstericiyi tanımladığınız gibi, aşağıdaki gibi tanımlayabilirsiniz -

var struct_pointer *Books

Şimdi, bir yapı değişkeninin adresini yukarıda tanımlanan işaretçi değişkeninde saklayabilirsiniz. Bir yapı değişkeninin adresini bulmak için, & operatörünü yapının adının önüne aşağıdaki gibi yerleştirin -

struct_pointer = &Book1;

Bir yapının üyelerine, o yapının göstericisini kullanarak erişmek için "." aşağıdaki gibi operatör -

struct_pointer.title;

Yapı işaretçisini kullanarak yukarıdaki örneği yeniden yazalım -

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}
func main() {
   var Book1 Books   /* Declare Book1 of type Book */
   var Book2 Books   /* Declare Book2 of type Book */
 
   /* book 1 specification */
   Book1.title = "Go Programming"
   Book1.author = "Mahesh Kumar"
   Book1.subject = "Go Programming Tutorial"
   Book1.book_id = 6495407

   /* book 2 specification */
   Book2.title = "Telecom Billing"
   Book2.author = "Zara Ali"
   Book2.subject = "Telecom Billing Tutorial"
   Book2.book_id = 6495700
 
   /* print Book1 info */
   printBook(&Book1)

   /* print Book2 info */
   printBook(&Book2)
}
func printBook( book *Books ) {
   fmt.Printf( "Book title : %s\n", book.title);
   fmt.Printf( "Book author : %s\n", book.author);
   fmt.Printf( "Book subject : %s\n", book.subject);
   fmt.Printf( "Book book_id : %d\n", book.book_id);
}

Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -

Book title     : Go Programming
Book author    : Mahesh Kumar
Book subject   : Go Programming Tutorial
Book book_id   : 6495407
Book title     : Telecom Billing
Book author    : Zara Ali
Book subject   : Telecom Billing Tutorial
Book book_id   : 6495700