Tulpar ve Go Karşılaştırmaları
Go ve Tulpar ikisi de statik tipli, native ikiliye derlenir ve aynı performans sınıfında yer alır. Fark, kutudan çıkanda: Go’nun standart kütüphanesi HTTP ve JSON’ı içerir ama SQLite, bir ORM ve OpenAPI üretimini üçüncü parti modüllere bırakır — Tulpar bunların tamamını runtime’a gömer.
JSON ve Struct Kullanımı
Section titled “JSON ve Struct Kullanımı” JSON ve Struct Kullanımı
Çıktı
package main
import "fmt"
type User struct { Name string Age int}
func main() { user := User{Name: "Hamza", Age: 27}
fmt.Println(user.Name) fmt.Println(user.Age)}Diziler ve Döngüler
Section titled “Diziler ve Döngüler” Diziler ve Döngüler
Çıktı
package main
import "fmt"
func main() { numbers := []int{1, 2, 3, 4, 5}
for _, n := range numbers { fmt.Println("Item:", n) }}String İşleme
Section titled “String İşleme” String İşleme
Çıktı
package main
import ( "fmt" "strings")
func main() { input := " TULPAR LANG "
cleaned := strings.ToLower(strings.TrimSpace(input)) parts := strings.Split(cleaned, " ")
fmt.Println("Cleaned:", cleaned) fmt.Println("First word:", parts[0])}Tek Dosyada HTTP API
Section titled “Tek Dosyada HTTP API”İki dil burada en çok ayrışıyor. Go’nun net/http’i routing’i halleder ama
SQLite erişimi, bir ORM, istek doğrulama ve OpenAPI/Swagger dokümantasyonu
her biri ayrı bir modül seçip içe aktarmak demek. Tulpar’da wings ve orm
zaten runtime’ın bir parçası.
import "wings";import "orm";
orm_open("app.db");define_model("users", { "id": "INTEGER PRIMARY KEY AUTOINCREMENT", "name": "TEXT NOT NULL", "age": "INTEGER"});
func list_users(req) { return ok(orm_all("users")); }func create_user(req) { return created(orm_create("users", req.json)); }
get("/users", "list_users");post("/users", "create_user");body_schema({"name": "str", "age?": "int"}); // hatalı body → otomatik 422
serve(8080); // + Swagger UI, /openapi.json, /metrics, /healthzpackage main
import ( "encoding/json" "net/http")
type User struct { ID int `json:"id"` Name string `json:"name"` Age int `json:"age"`}
var users []Uservar nextID = 1
func usersHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case http.MethodGet: json.NewEncoder(w).Encode(users) case http.MethodPost: var u User json.NewDecoder(r.Body).Decode(&u) u.ID = nextID nextID++ users = append(users, u) w.WriteHeader(http.StatusCreated) json.NewEncoder(w).Encode(u) }}
func main() { http.HandleFunc("/users", usersHandler) http.ListenAndServe(":8080", nil) // SQLite, bir ORM, OpenAPI/Swagger dokümantasyonu ve /metrics standart // kütüphanede yok — her biri ayrı bir modül gerektirir (database/sql + // bir driver, gorm, swaggo, prometheus/client_golang, ...).}Tulpar tarafının rehberli, üç uygulamalı versiyonu için Wings Öğreticisi’ne, ham HTTP verimi karşılaştırması için Benchmark Sonuçları’na bakın.