Yapıcı Örüntüleri
Go'ya özgü yapıcılar oluşturma
Yapıcı Örüntüleri, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.
Kurucular Neden Kullanılır
Go'da türler için new anahtar sözcüğü veya sınıf kurucuları yoktur. Gelenek, girdileri doğrulayan ve başlatılmış bir değer ya da işaretçi döndüren New... adlı bir işlev kullanmaktır.
Basit New İşlevi
Çağıranın paylaşılan bir örnekle çalışmasını sağlamak için bir işaretçi döndürünüz:
package main
import "fmt"
type Server struct {
Host string
Port int
}
func NewServer(host string, port int) *Server {
return &Server{Host: host, Port: port}
}
func main() {
s := NewServer("localhost", 8080)
fmt.Println(s.Host, s.Port)
}Kurucularda Doğrulama
Kurucular, girdileri doğrulamak ve bir hata döndürmek için uygun bir yerdir:
package main
import ("errors"; "fmt")
type Config struct{ Workers int }
func NewConfig(workers int) (*Config, error) {
if workers < 1 {
return nil, errors.New("workers must be >= 1")
}
return &Config{Workers: workers}, nil
}
func main() {
c, err := NewConfig(4)
fmt.Println(c, err)
}İşlevsel Seçenekler Kalıbı
İşlevsel seçenekler kalıbı, API'yi bozmadan isteğe bağlı yapılandırmaya olanak tanır:
package main
import "fmt"
type Server struct{ host string; port int; timeout int }
type Option func(*Server)
func WithPort(p int) Option { return func(s *Server) { s.port = p } }
func WithTimeout(t int) Option { return func(s *Server) { s.timeout = t } }
func NewServer(host string, opts ...Option) *Server {
s := &Server{host: host, port: 8080, timeout: 30}
for _, o := range opts { o(s) }
return s
}
func main() {
s := NewServer("localhost", WithPort(9090), WithTimeout(60))
fmt.Println(s.port, s.timeout)
}Oluşturucu Kalıbı
Karmaşık nesneler için oluşturucu kalıbı, ayarlayıcı yöntemleri zincirler ve sonucu döndürür:
package main
import "fmt"
type QueryBuilder struct{ table, where string; limit int }
func (q *QueryBuilder) Table(t string) *QueryBuilder { q.table = t; return q }
func (q *QueryBuilder) Where(w string) *QueryBuilder { q.where = w; return q }
func (q *QueryBuilder) Limit(n int) *QueryBuilder { q.limit = n; return q }
func (q *QueryBuilder) Build() string {
return fmt.Sprintf("SELECT * FROM %s WHERE %s LIMIT %d", q.table, q.where, q.limit)
}
func main() {
sql := (&QueryBuilder{}).Table("users").Where("age>18").Limit(10).Build()
fmt.Println(sql)
}Değer mi İşaretçi mi Döndürmeli
Yapı küçük ve değişmez olduğunda değer; yapı büyük veya değiştirilebilir olduğunda ya da arayüzler uyguladığında işaretçi döndürünüz:
- Küçük yapılandırma yapıları → değer
- Durum taşıyan nesneler (sunucu, istemci, havuz) → işaretçi
- İşaretçi alıcılarıyla bir arayüz uygulanıyorsa → işaretçi
Varsayılan Değerler Kalıbı
Seçenekleri uygulamadan önce uygun varsayılanları ayarlamak için bir varsayılanlar işlevi veya yapı değişmezi kullanınız:
package main
import "fmt"
type Cache struct{ maxSize int; ttlSecs int }
func defaultCache() Cache { return Cache{maxSize: 100, ttlSecs: 300} }
func NewCache(opts ...func(*Cache)) *Cache {
c := defaultCache()
for _, o := range opts { o(&c) }
return &c
}
func main() {
c := NewCache(func(c *Cache) { c.maxSize = 500 })
fmt.Println(c.maxSize, c.ttlSecs) // 500 300
}Tekil Örnek Kalıbı
Paylaşılan bir kaynağı tam olarak bir kez başlatmak için sync.Once kullanınız:
package main
import ("fmt"; "sync")
type DB struct{ DSN string }
var (
instance *DB
once sync.Once
)
func GetDB(dsn string) *DB {
once.Do(func() { instance = &DB{DSN: dsn} })
return instance
}
func main() {
db1 := GetDB("postgres://...")
db2 := GetDB("ignored")
fmt.Println(db1 == db2) // true
}Kurucuları Sınama
Hata döndüren kurucuları sınamak kolaydır:
package main
import ("errors"; "fmt")
type Pool struct{ size int }
func NewPool(size int) (*Pool, error) {
if size <= 0 { return nil, errors.New("size must be positive") }
return &Pool{size: size}, nil
}
func main() {
_, err := NewPool(-1)
fmt.Println(err) // size must be positive
p, _ := NewPool(5)
fmt.Println(p.size) // 5
}init() Kullanımından Kaçınınız
init() işlevleri otomatik olarak çalışır ve sınanmaları zordur. init() içinde örtük başlatma yapmak yerine hata döndüren açık kurucuları tercih ediniz.
Kısa Kontrol
İşlevsel seçenekler kalıbı ne sağlar?
Özet: Kurucu Kalıpları
Temel çıkarımlar:
- Kurucu olarak
New...işlevlerini kullanınız - Doğrulama başarısızlıklarında hatalar döndürünüz
- Esnek isteğe bağlı yapılandırma için işlevsel seçenekleri kullanınız
- Karmaşık sorgu ve yapılandırma nesneleri için oluşturucu kalıbını kullanınız
init()yerine açık kurucuları tercih ediniz
Alıştırma Görevi
İşlevsel seçenekleri kullanarak bir NewHTTPClient kurucusu uygulayınız. WithTimeout, WithBaseURL ve WithMaxRetries seçeneklerini destekleyiniz.
Yapay zeka eğitmeniyle Go öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 51
- Dersler
- 203
Sıkça Sorulan Sorular
“Yapıcı Örüntüleri” dersi ücretsiz mi?
Evet — “Yapıcı Örüntüleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.
“Yapıcı Örüntüleri” dersinde ne öğreneceğim?
Go'ya özgü yapıcılar oluşturma Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Go Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Yapıcı Örüntüleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.