Menu
Coddy logo textTech

Struct Başlatma

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 9 / 107.

Go, her biri farklı durumlarda kullanışlı olan, struct'ları başlatmak için birkaç yöntem sunar.

Adlandırılmış alan başlatma

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Konumsal ilklendirme (sıra, alan bildirimiyle eşleşmelidir)

p2 := Person{"Bob", 30, "London"}

Sıfır-değerli ilklendirme (tüm alanlar varsayılan değerleri alır)

p3 := Person{}
// Name: "", Age: 0, City: ""

Kısmi başlatma (ayarlanmamış alanlar sıfır değerlerini alır)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

& kullanarak bir struct işaretçisi (pointer)

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

var kullanıp ardından alanlara değer atama

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Adlandırılmış alan başlatma, en yaygın ve okunabilir yaklaşımdır. Yapıya (struct) bir işaretçi (pointer) ihtiyacınız olduğunda & kullanın.

challenge icon

Görev

Orta

Farklı başlatma yöntemlerini kullanarak üç Player nesnesi oluşturun:

  • player1: Girdi değerlerini kullanarak adlandırılmış alan başlatma
  • player2: Name: "Guest", Class: "Novice", HitPoints: 50 ile adlandırılmış alan başlatma
  • player3: var bildirimini kullanın, ardından her alanı ayrı ayrı atayın

Kopya kağıdı

Go, struct'ları başlatmak için birkaç yol sunar:

Adlandırılmış alan başlatma (en yaygın ve okunabilir olanı):

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Konumsal başlatma (sıralama, alan bildirimiyle eşleşmelidir):

p2 := Person{"Bob", 30, "London"}

Sıfır-değer başlatma (tüm alanlar varsayılan değerleri alır):

p3 := Person{}
// Name: "", Age: 0, City: ""

Kısmi başlatma (ayarlanmamış alanlar sıfır değerlerini alır):

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

& kullanarak bir struct'a işaretçi (pointer):

p5 := &Person{
    Name: "Diana",
    Age:  28,
}
fmt.Println(p5.Name) // Diana

var kullanarak ve ardından alanları atayarak:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Kendin dene

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: Giriş değerlerini kullanarak isimlendirilmiş alan başlatma ile player1'i oluşturun

    // TODO: İsimlendirilmiş alan başlatma kullanarak player2'yi oluşturun:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: var deklarasyonunu kullanarak player3'ü oluşturun, ardından alanları atayın:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler