<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>golang &#8211; Selman Tunc</title>
	<atom:link href="https://selmantunc.com.tr/category/golang/feed/" rel="self" type="application/rss+xml" />
	<link>https://selmantunc.com.tr</link>
	<description></description>
	<lastBuildDate>Mon, 13 Apr 2026 04:19:43 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://selmantunc.com.tr/wp-content/uploads/2023/07/cropped-tumblr_inline_oglumuMbgO1tyldvk_540-150x150-1-32x32.jpg</url>
	<title>golang &#8211; Selman Tunc</title>
	<link>https://selmantunc.com.tr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>The Domain Concept for Hexagonal Architecture in Go (Golang)</title>
		<link>https://selmantunc.com.tr/golang/the-domain-concept-for-hexagonal-architecture-in-go-golang/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 04:19:43 +0000</pubDate>
				<category><![CDATA[english]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3541</guid>

					<description><![CDATA[Here is the English version of the Go (Golang) Hexagonal Architecture example, with the same structure and explanations. 📁 Folder Structure hexagonal-go/ ├── go.mod ├── cmd/ │ └── api/ │&#8230;]]></description>
										<content:encoded><![CDATA[<p>Here is the <strong>English version</strong> of the Go (Golang) Hexagonal Architecture example, with the same structure and explanations.</p>
<hr />
<h1>📁 Folder Structure</h1>
<pre><code class="lang-text language-text text">hexagonal-go/
├── go.mod
├── cmd/
│   └── api/
│       └── main.go
└── internal/
    ├── domain/
    │   └── order/
    │       ├── money.go
    │       ├── order.go
    │       ├── order_id.go
    │       ├── order_status.go
    │       └── repository.go
    ├── application/
    │   └── order_service.go
    └── adapters/
        ├── http/
        │   └── order_handler.go
        └── persistence/
            └── memory/
                └── order_repository.go</code></pre>
<hr />
<h1>1) <code>go.mod</code></h1>
<pre><code class="lang-go language-go go">module example.com/hexagonal-go

go 1.22</code></pre>
<hr />
<h1>2) Domain Layer</h1>
<h3><code>internal/domain/order/order_id.go</code></h3>
<pre><code class="lang-go language-go go">package order

type OrderID string</code></pre>
<h3><code>internal/domain/order/order_status.go</code></h3>
<pre><code class="lang-go language-go go">package order

type OrderStatus string

const (
    OrderStatusCreated   OrderStatus = &quot;CREATED&quot;
    OrderStatusCompleted OrderStatus = &quot;COMPLETED&quot;
)</code></pre>
<h3><code>internal/domain/order/money.go</code></h3>
<pre><code class="lang-go language-go go">package order

import &quot;fmt&quot;

type Money struct {
    Cents int64
}

func NewMoney(cents int64) (Money, error) {
    if cents &lt; 0 {
        return Money{}, fmt.Errorf(&quot;money cannot be negative&quot;)
    }
    return Money{Cents: cents}, nil
}

func (m Money) Add(other Money) Money {
    return Money{Cents: m.Cents + other.Cents}
}</code></pre>
<h3><code>internal/domain/order/order.go</code></h3>
<pre><code class="lang-go language-go go">package order

import &quot;fmt&quot;

type OrderItem struct {
    ProductID string
    Quantity  int
    UnitPrice Money
}

type Order struct {
    id     OrderID
    items  []OrderItem
    status OrderStatus
}

func NewOrder(id OrderID) *Order {
    return &amp;Order{
        id:     id,
        items:  make([]OrderItem, 0),
        status: OrderStatusCreated,
    }
}

func (o *Order) ID() OrderID {
    return o.id
}

func (o *Order) Status() OrderStatus {
    return o.status
}

func (o *Order) Items() []OrderItem {
    copied := make([]OrderItem, len(o.items))
    copy(copied, o.items)
    return copied
}

func (o *Order) AddItem(productID string, quantity int, unitPrice Money) error {
    if o.status != OrderStatusCreated {
        return fmt.Errorf(&quot;order cannot be modified after completion&quot;)
    }
    if productID == &quot;&quot; {
        return fmt.Errorf(&quot;product id cannot be empty&quot;)
    }
    if quantity &lt;= 0 {
        return fmt.Errorf(&quot;quantity must be greater than zero&quot;)
    }

    o.items = append(o.items, OrderItem{
        ProductID: productID,
        Quantity:  quantity,
        UnitPrice: unitPrice,
    })

    return nil
}

func (o *Order) Complete() error {
    if len(o.items) == 0 {
        return fmt.Errorf(&quot;order must have at least one item&quot;)
    }
    o.status = OrderStatusCompleted
    return nil
}

func (o *Order) Total() Money {
    total := Money{Cents: 0}
    for _, item := range o.items {
        total = total.Add(Money{Cents: item.UnitPrice.Cents * int64(item.Quantity)})
    }
    return total
}</code></pre>
<h3><code>internal/domain/order/repository.go</code></h3>
<pre><code class="lang-go language-go go">package order

import &quot;context&quot;

type Repository interface {
    Save(ctx context.Context, order *Order) error
    FindByID(ctx context.Context, id OrderID) (*Order, error)
}</code></pre>
<hr />
<h1>3) Application Layer</h1>
<h3><code>internal/application/order_service.go</code></h3>
<pre><code class="lang-go language-go go">package application

import (
    &quot;context&quot;
    &quot;fmt&quot;
    &quot;time&quot;

    &quot;example.com/hexagonal-go/internal/domain/order&quot;
)

type OrderService struct {
    repo order.Repository
}

func NewOrderService(repo order.Repository) *OrderService {
    return &amp;OrderService{repo: repo}
}

func (s *OrderService) CreateOrder(ctx context.Context) (*order.Order, error) {
    id := order.OrderID(fmt.Sprintf(&quot;ord_%d&quot;, time.Now().UnixNano()))
    newOrder := order.NewOrder(id)

    if err := s.repo.Save(ctx, newOrder); err != nil {
        return nil, err
    }

    return newOrder, nil
}

func (s *OrderService) AddItem(ctx context.Context, orderID order.OrderID, productID string, quantity int, priceCents int64) (*order.Order, error) {
    o, err := s.repo.FindByID(ctx, orderID)
    if err != nil {
        return nil, err
    }

    price, err := order.NewMoney(priceCents)
    if err != nil {
        return nil, err
    }

    if err := o.AddItem(productID, quantity, price); err != nil {
        return nil, err
    }

    if err := s.repo.Save(ctx, o); err != nil {
        return nil, err
    }

    return o, nil
}

func (s *OrderService) CompleteOrder(ctx context.Context, orderID order.OrderID) (*order.Order, error) {
    o, err := s.repo.FindByID(ctx, orderID)
    if err != nil {
        return nil, err
    }

    if err := o.Complete(); err != nil {
        return nil, err
    }

    if err := s.repo.Save(ctx, o); err != nil {
        return nil, err
    }

    return o, nil
}

func (s *OrderService) GetOrder(ctx context.Context, orderID order.OrderID) (*order.Order, error) {
    return s.repo.FindByID(ctx, orderID)
}</code></pre>
<hr />
<h1>4) Persistence Adapter (In-Memory)</h1>
<h3><code>internal/adapters/persistence/memory/order_repository.go</code></h3>
<pre><code class="lang-go language-go go">package memory

import (
    &quot;context&quot;
    &quot;fmt&quot;
    &quot;sync&quot;

    &quot;example.com/hexagonal-go/internal/domain/order&quot;
)

type OrderRepository struct {
    mu     sync.RWMutex
    orders map[order.OrderID]*order.Order
}

func NewOrderRepository() *OrderRepository {
    return &amp;OrderRepository{
        orders: make(map[order.OrderID]*order.Order),
    }
}

func (r *OrderRepository) Save(ctx context.Context, o *order.Order) error {
    r.mu.Lock()
    defer r.mu.Unlock()

    r.orders[o.ID()] = o
    return nil
}

func (r *OrderRepository) FindByID(ctx context.Context, id order.OrderID) (*order.Order, error) {
    r.mu.RLock()
    defer r.mu.RUnlock()

    o, ok := r.orders[id]
    if !ok {
        return nil, fmt.Errorf(&quot;order not found: %s&quot;, id)
    }

    return o, nil
}</code></pre>
<hr />
<h1>5) HTTP Adapter</h1>
<h3><code>internal/adapters/http/order_handler.go</code></h3>
<pre><code class="lang-go language-go go">package httpadapter

import (
    &quot;encoding/json&quot;
    &quot;net/http&quot;
    &quot;strings&quot;

    &quot;example.com/hexagonal-go/internal/application&quot;
    &quot;example.com/hexagonal-go/internal/domain/order&quot;
)

type OrderHandler struct {
    service *application.OrderService
}

func NewOrderHandler(service *application.OrderService) *OrderHandler {
    return &amp;OrderHandler{service: service}
}

func (h *OrderHandler) RegisterRoutes(mux *http.ServeMux) {
    mux.HandleFunc(&quot;POST /orders&quot;, h.createOrder)
    mux.HandleFunc(&quot;GET /orders/&quot;, h.getOrder)
    mux.HandleFunc(&quot;POST /orders/{id}/items&quot;, h.addItem)
    mux.HandleFunc(&quot;POST /orders/{id}/complete&quot;, h.completeOrder)
}

func (h *OrderHandler) createOrder(w http.ResponseWriter, r *http.Request) {
    o, err := h.service.CreateOrder(r.Context())
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    respondJSON(w, http.StatusCreated, map[string]any{
        &quot;id&quot;:     o.ID(),
        &quot;status&quot;: o.Status(),
        &quot;total&quot;:  o.Total().Cents,
    })
}

func (h *OrderHandler) getOrder(w http.ResponseWriter, r *http.Request) {
    id := extractID(r.URL.Path)
    o, err := h.service.GetOrder(r.Context(), order.OrderID(id))
    if err != nil {
        http.Error(w, err.Error(), http.StatusNotFound)
        return
    }

    respondJSON(w, http.StatusOK, map[string]any{
        &quot;id&quot;:     o.ID(),
        &quot;status&quot;: o.Status(),
        &quot;items&quot;:  o.Items(),
        &quot;total&quot;:  o.Total().Cents,
    })
}

func (h *OrderHandler) addItem(w http.ResponseWriter, r *http.Request) {
    id := extractID(r.URL.Path)

    var req struct {
        ProductID string `json:&quot;product_id&quot;`
        Quantity  int    `json:&quot;quantity&quot;`
        PriceCents int64  `json:&quot;price_cents&quot;`
    }

    if err := json.NewDecoder(r.Body).Decode(&amp;req); err != nil {
        http.Error(w, &quot;invalid json&quot;, http.StatusBadRequest)
        return
    }

    o, err := h.service.AddItem(r.Context(), order.OrderID(id), req.ProductID, req.Quantity, req.PriceCents)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    respondJSON(w, http.StatusOK, map[string]any{
        &quot;id&quot;:     o.ID(),
        &quot;status&quot;: o.Status(),
        &quot;total&quot;:  o.Total().Cents,
    })
}

func (h *OrderHandler) completeOrder(w http.ResponseWriter, r *http.Request) {
    id := extractID(r.URL.Path)
    o, err := h.service.CompleteOrder(r.Context(), order.OrderID(id))
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    respondJSON(w, http.StatusOK, map[string]any{
        &quot;id&quot;:     o.ID(),
        &quot;status&quot;: o.Status(),
        &quot;total&quot;:  o.Total().Cents,
    })
}

func extractID(path string) string {
    parts := strings.Split(strings.Trim(path, &quot;/&quot;), &quot;/&quot;)
    if len(parts) &gt;= 2 {
        return parts[1]
    }
    return &quot;&quot;
}

func respondJSON(w http.ResponseWriter, status int, payload any) {
    w.Header().Set(&quot;Content-Type&quot;, &quot;application/json&quot;)
    w.WriteHeader(status)
    _ = json.NewEncoder(w).Encode(payload)
}</code></pre>
<hr />
<h1>6) Application Entry Point</h1>
<h3><code>cmd/api/main.go</code></h3>
<pre><code class="lang-go language-go go">package main

import (
    &quot;log&quot;
    &quot;net/http&quot;

    httpadapter &quot;example.com/hexagonal-go/internal/adapters/http&quot;
    &quot;example.com/hexagonal-go/internal/adapters/persistence/memory&quot;
    &quot;example.com/hexagonal-go/internal/application&quot;
)

func main() {
    repo := memory.NewOrderRepository()
    service := application.NewOrderService(repo)
    handler := httpadapter.NewOrderHandler(service)

    mux := http.NewServeMux()
    handler.RegisterRoutes(mux)

    log.Println(&quot;server started on :8080&quot;)
    if err := http.ListenAndServe(&quot;:8080&quot;, mux); err != nil {
        log.Fatal(err)
    }
}</code></pre>
<hr />
<h1>7) How It Works</h1>
<ul>
<li><strong>HTTP adapter</strong> receives the request</li>
<li><strong>Application service</strong> executes the use case</li>
<li><strong>Domain</strong> applies business rules</li>
<li><strong>Repository (port)</strong> is defined in the domain</li>
<li><strong>Adapter (memory)</strong> implements it</li>
</ul>
<p>👉 The domain layer:</p>
<ul>
<li>does NOT know <code>net/http</code></li>
<li>does NOT know databases</li>
<li>does NOT know frameworks</li>
</ul>
<hr />
<h1>8) Simple Test Example</h1>
<h3><code>internal/domain/order/order_test.go</code></h3>
<pre><code class="lang-go language-go go">package order

import &quot;testing&quot;

func TestOrderCompleteWithoutItems(t *testing.T) {
    o := NewOrder(&quot;1&quot;)

    if err := o.Complete(); err == nil {
        t.Fatal(&quot;expected error when completing empty order&quot;)
    }
}

func TestOrderTotal(t *testing.T) {
    o := NewOrder(&quot;1&quot;)
    price, _ := NewMoney(500)

    if err := o.AddItem(&quot;p1&quot;, 2, price); err != nil {
        t.Fatal(err)
    }

    if o.Total().Cents != 1000 {
        t.Fatalf(&quot;expected 1000, got %d&quot;, o.Total().Cents)
    }
}</code></pre>
<hr />
<h1>9) Run the Project</h1>
<pre><code class="lang-bash language-bash bash">go run ./cmd/api</code></pre>
<p>Example requests:</p>
<pre><code class="lang-bash language-bash bash">curl -X POST localhost:8080/orders</code></pre>
<pre><code class="lang-bash language-bash bash">curl -X POST localhost:8080/orders/ord_xxx/items \
  -H 'Content-Type: application/json' \
  -d '{&quot;product_id&quot;:&quot;p1&quot;,&quot;quantity&quot;:2,&quot;price_cents&quot;:500}'</code></pre>
<pre><code class="lang-bash language-bash bash">curl -X POST localhost:8080/orders/ord_xxx/complete</code></pre>
<hr />]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>c *fiber.Ctx bunu nasil bir fonkyon icinde init ederim</title>
		<link>https://selmantunc.com.tr/golang/c-fiber-ctx-bunu-nasil-bir-fonkyon-icinde-init-ederim/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sun, 12 Apr 2026 03:19:49 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3536</guid>

					<description><![CDATA[Fiber&#8217;deki *fiber.Ctx nesnesi, bir HTTP isteği sırasında oluşan istek (request) ve yanıt (response) döngüsünü yönetir. Bu nesne sadece bir handler (yönlendirici) fonksiyonu içinde Fiber tarafından oluşturulur. Yani *fiber.Ctx nesnesini dışarıdan&#8230;]]></description>
										<content:encoded><![CDATA[<p>Fiber&#8217;deki <code>*fiber.Ctx</code> nesnesi, bir HTTP isteği sırasında oluşan <strong>istek (request)</strong> ve <strong>yanıt (response)</strong> döngüsünü yönetir. Bu nesne sadece bir handler (yönlendirici) fonksiyonu içinde <strong>Fiber tarafından oluşturulur</strong>.</p>
<p>Yani <code>*fiber.Ctx</code> nesnesini dışarıdan manuel olarak &#8220;başlatamazsınız&#8221; (instantiate edemezsiniz). Ancak, bu nesneyi ihtiyaç duyduğunuz yardımcı fonksiyonlara <strong>parametre olarak</strong> geçirebilirsiniz.</p>
<p>İşte temiz ve modüler bir mimari için uygulayabileceğiniz yöntemler:</p>
<h3>1. Yöntem: Handler İçinde Hazırlık ve Parametre Olarak Geçirme (En İyi Pratik)</h3>
<p>Handler fonksiyonu Fiber ile konuşur, ancak asıl işi yapan &#8220;Service&#8221; katmanındaki fonksiyonlara <code>*fiber.Ctx</code> yerine sadece ihtiyacı olan verileri (örneğin sadece <code>limit</code> veya <code>search</code> değerini) geçirmek en iyi yaklaşımdır.</p>
<pre><code class="lang-go language-go go">// Service Katmanı (Logic fonksiyonu)
func GetPostsFromDB(db *gorm.DB, start int, length int, search string) ([]Post, int64, error) {
    // Sadece veriyle ilgilenir, Fiber'den bağımsızdır.
    var posts []Post
    var count int64

    // İşlemler...
    return posts, count, nil
}

// Handler Katmanı
app.Get(&quot;/api/posts&quot;, func(c *fiber.Ctx) error {
    // Fiber'den verileri al
    start := c.QueryInt(&quot;start&quot;, 0)

    // Servis fonksiyonunu &ccedil;ağır
    posts, count, _ := GetPostsFromDB(db, start, 10, &quot;&quot;)

    return c.JSON(fiber.Map{&quot;data&quot;: posts, &quot;total&quot;: count})
})</code></pre>
<h3>2. Yöntem: Context&#8217;i Fonksiyona Taşımak</h3>
<p>Eğer fonksiyonun içinde <code>c.Status()</code>, <code>c.JSON()</code> veya <code>c.Params()</code> gibi Fiber özelliklerine sürekli ihtiyacınız varsa, fonksiyon imzasını şu şekilde kurabilirsiniz:</p>
<pre><code class="lang-go language-go go">func HandleRequestData(c *fiber.Ctx) error {
    // Bu fonksiyon doğrudan Fiber context'ini kullanabilir
    search := c.Query(&quot;search&quot;)

    // ... işlemler
    return c.JSON(fiber.Map{&quot;search&quot;: search})
}

// Kullanımı
app.Get(&quot;/search&quot;, HandleRequestData)</code></pre>
<h3>3. Yöntem: <code>Locals</code> Kullanımı (Veri Paylaşımı)</h3>
<p><code>*fiber.Ctx</code> içerisindeki <code>.Locals()</code> fonksiyonunu kullanarak, middleware&#8217;de başlattığınız bir veriyi (örneğin Auth bilgisi veya User ID) tüm fonksiyonlarınızda kullanabilirsiniz.</p>
<pre><code class="lang-go language-go go">// Middleware
app.Use(func(c *fiber.Ctx) error {
    c.Locals(&quot;userID&quot;, 123) // Bir kez set et
    return c.Next()
})

// İstediğiniz herhangi bir fonksiyonda
func MyHandler(c *fiber.Ctx) error {
    userID := c.Locals(&quot;userID&quot;) // Buradan al
    return c.SendString(fmt.Sprintf(&quot;User: %v&quot;, userID))
}</code></pre>
<h3>Neden <code>*fiber.Ctx</code> ile &#8220;Init&#8221; yapmamalısınız?</h3>
<ul>
<li><strong>Test Edilebilirlik:</strong> Eğer fonksiyonlarınızı <code>*fiber.Ctx</code>&#8216;e bağımlı yaparsanız, o fonksiyonu bir HTTP isteği olmadan test edemezsiniz (Unit test yazamazsınız).</li>
<li><strong>Bağımsızlık:</strong> Fonksiyonlarınızı <code>c.Query()</code>, <code>c.Params()</code> yerine doğrudan <code>int</code>, <code>string</code> gibi standart Go tiplerini kabul edecek şekilde tasarlarsanız, aynı fonksiyonu hem HTTP API&#8217;nizde hem de bir CLI komutunda veya bir background job&#8217;da değiştirmeden kullanabilirsiniz.</li>
</ul>
<p><strong>Özetle:</strong> <code>*fiber.Ctx</code> nesnesini başlatmaya çalışmayın. <code>*fiber.Ctx</code>&#8216;ten verileri çıkarın (<code>c.QueryInt</code> gibi) ve bu saf verileri kendi yazdığınız fonksiyonlara parametre olarak gönderin. </p>
<p>Bu şekilde kodunuzu &#8220;Fiber&#8217;e bağlı&#8221; olmaktan kurtarıp &#8220;saf Go kodu&#8221; haline getirmiş olursunuz. Bu yaklaşım kod tabanınızı uzun vadede çok daha sürdürülebilir kılacaktır. Başka bir katman mimarisi (Service/Repository pattern) üzerinde çalışıyor musunuz?</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Golang Firewall Projects</title>
		<link>https://selmantunc.com.tr/golang/golang-firewall-projects/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 21 Feb 2026 06:18:07 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3456</guid>

					<description><![CDATA[Several GitHub firewall projects from the previous list are written in Go (Golang), often as core components or full implementations. These include bouncers, wrappers, and interactive firewalls that leverage Go&#8217;s&#8230;]]></description>
										<content:encoded><![CDATA[<p>Several GitHub firewall projects from the previous list are written in Go (Golang), often as core components or full implementations. These include bouncers, wrappers, and interactive firewalls that leverage Go&#8217;s performance for network handling. <a href="https://pkg.go.dev/github.com/crowdsecurity/cs-firewall-bouncer">pkg.go</a></p>
<h2>Golang Firewall Projects</h2>
<table>
<thead>
<tr>
<th>Project</th>
<th>Description</th>
<th>Stars (approx.)</th>
<th>GitHub Link</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>crowdsecurity/cs-firewall-bouncer</strong>  <a href="https://github.com/crowdsecurity/cs-firewall-bouncer">github</a></td>
<td>CrowdSec bouncer for iptables, nftables, ipset, and pf firewalls; fetches decisions from CrowdSec API  <a href="https://pkg.go.dev/github.com/crowdsecurity/cs-firewall-bouncer">pkg.go</a>.</td>
<td>300+</td>
<td><a href="https://github.com/crowdsecurity/cs-firewall-bouncer">https://github.com/crowdsecurity/cs-firewall-bouncer</a></td>
</tr>
<tr>
<td><strong>evilsocket/opensnitch</strong>  <a href="https://github.com/goware/firewall">github</a></td>
<td>GNU/Linux interactive app firewall; daemon core in Go (38.6%), UI in Python  <a href="https://github.com/evilsocket/opensnitch">github</a>.</td>
<td>10k+</td>
<td><a href="https://github.com/evilsocket/opensnitch">https://github.com/evilsocket/opensnitch</a></td>
</tr>
<tr>
<td><strong>bgrewell/go-firewall</strong>  <a href="https://github.com/bgrewell/go-firewall">github</a></td>
<td>Go wrapper for programmatic iptables control on Linux  <a href="https://github.com/bgrewell/go-firewall">github</a>.</td>
<td>2+</td>
<td><a href="https://github.com/bgrewell/go-firewall">https://github.com/bgrewell/go-firewall</a></td>
</tr>
</tbody>
</table>
<h2>Additional Notable Golang Ones</h2>
<ul>
<li><strong>crowdsecurity/cs-cloud-firewall-bouncer</strong>: Cloud firewall bouncer integrating with CrowdSec for rule updates. <a href="https://github.com/crowdsecurity/cs-cloud-firewall-bouncer">github</a></li>
<li><strong>goware/firewall</strong>: HTTP middleware for blocking IP ranges via CIDR. <a href="https://github.com/goware/firewall">github</a></li>
<li><strong>ngrok/firewall_toolkit</strong>: High-level nftables management library. <a href="https://pkg.go.dev/github.com/ngrok/firewall_toolkit">pkg.go</a></li>
</ul>
<p>None of the top projects like OpenGFW (C/Rust), bunkerweb (NGINX/Lua), or firewalld (Python/C) are primarily in Go. Check repositories&#8217; languages tab for confirmation. <a href="https://github.com/bunkerity/bunkerweb">github</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Golang Notes</title>
		<link>https://selmantunc.com.tr/golang/golang-notes/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 04 Feb 2025 03:48:58 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3376</guid>

					<description><![CDATA[https://github.com/cashapp/spirit https://github.com/search?q=golang&#38;type=repositories&#38;s=updated&#38;o=desc&#38;p=21   https://stackoverflow.com/questions/10838469/how-to-compile-go-program-consisting-of-multiple-files   # GOP LANGUAGE https://github.com/goplus/gop/releases/tag/v0.4.1 https://github.com/goplus/gop/releases/tag/v0.5.00 https://github.com/goplus/gop/tags?after=v0.6.30     ## blockcoin https://github.com/archway-network/archway &#8212; blockcoin     https://github.com/goravel ## Learn https://github.com/dnanseldev/GolangSandbox/tree/tests/cmd/Deadlock https://github.com/astaxie/build-web-application-with-golang/blob/master/tr/02.1.md https://github.com/doocs/leetcode/blob/main/README_EN.md leetcode https://github.com/zrma/1d1go leetcode vs&#8230;]]></description>
										<content:encoded><![CDATA[<div>

<a href="https://github.com/cashapp/spirit">https://github.com/cashapp/spirit</a>

<a href="https://github.com/search?q=golang&amp;type=repositories&amp;s=updated&amp;o=desc&amp;p=21">https://github.com/search?q=golang&amp;type=repositories&amp;s=updated&amp;o=desc&amp;p=21</a>

 

<a href="https://stackoverflow.com/questions/10838469/how-to-compile-go-program-consisting-of-multiple-files">https://stackoverflow.com/questions/10838469/how-to-compile-go-program-consisting-of-multiple-files</a>

 

# GOP LANGUAGE
<a href="https://github.com/goplus/gop/releases/tag/v0.4.1">https://github.com/goplus/gop/releases/tag/v0.4.1</a>

<a href="https://github.com/goplus/gop/releases/tag/v0.5.00">https://github.com/goplus/gop/releases/tag/v0.5.00</a>

<a href="https://github.com/goplus/gop/tags?after=v0.6.30">https://github.com/goplus/gop/tags?after=v0.6.30</a>

 

 

## blockcoin

https://github.com/archway-network/archway &#8212; blockcoin

 

 

https://github.com/goravel

## Learn
<a href="https://github.com/dnanseldev/GolangSandbox/tree/tests/cmd/Deadlock">https://github.com/dnanseldev/GolangSandbox/tree/tests/cmd/Deadlock</a>

<a href="https://github.com/astaxie/build-web-application-with-golang/blob/master/tr/02.1.md">https://github.com/astaxie/build-web-application-with-golang/blob/master/tr/02.1.md</a>

<a href="https://github.com/doocs/leetcode/blob/main/README_EN.md">https://github.com/doocs/leetcode/blob/main/README_EN.md</a> leetcode
https://github.com/zrma/1d1go leetcode vs hep var

<a href="https://github.com/moorara/algo">https://github.com/moorara/algo</a> &#8212; Algorithms and Data Structure For Go Applications

<a href="https://github.com/tsabunkar/basics-go">https://github.com/tsabunkar/basics-go</a>

<a href="https://github.com/khaaleoo/golang-design-patterns">https://github.com/khaaleoo/golang-design-patterns</a> patterns

<a href="https://github.com/horlatayorr/Golang_CLI_Application">https://github.com/horlatayorr/Golang_CLI_Application</a>

<a href="https://github.com/auraluvsu/Golang-Learning">https://github.com/auraluvsu/Golang-Learning</a>

<a href="https://github.com/codeozdev/nextjs-golang-project">https://github.com/codeozdev/nextjs-golang-project</a>

<a href="https://github.com/zeromicro/go-zero">https://github.com/zeromicro/go-zero</a> &#8212; grpc and other

</div>
<p><a href="https://github.com/astaxie/build-web-application-with-golang/tree/master">https://github.com/astaxie/build-web-application-with-golang/tree/master</a>  &#8211; perfect</p>
<div>

## ARCH
<a href="https://github.com/thanhdaon/clean-arch-go/tree/main">https://github.com/thanhdaon/clean-arch-go/tree/main</a>
<a href="https://github.com/ynwd/awesome-blog">https://github.com/ynwd/awesome-blog</a> &#8212;  its like mvc
<h2>Framework</h2>
<a href="https://github.com/go-liquor">https://github.com/go-liquor</a>
<a href="https://github.com/elanticrypt0/milonga/tree/master">https://github.com/elanticrypt0/milonga/tree/master</a>
<a href="https://github.com/siddharth2440/Ecommerce-GO">https://github.com/siddharth2440/Ecommerce-GO</a>

<a href="https://github.com/devopscorner/golang-deployment/tree/master?tab=readme-ov-file">https://github.com/devopscorner/golang-deployment/tree/master?tab=readme-ov-file</a>   &#8212; its like framework

<a href="https://github.com/kataras/iris/tree/main">https://github.com/kataras/iris/tree/main</a> &#8212; there are a lot of modules

<a href="https://github.com/zeromicro/go-zero">https://github.com/zeromicro/go-zero</a> &#8212; grpc and other

<a href="https://github.com/micro/go-micro/tree/master">https://github.com/micro/go-micro/tree/master</a>

<a href="https://github.com/goadesign/goa/tree/v3">https://github.com/goadesign/goa/tree/v3</a>
<a href="https://github.com/beego">https://github.com/beego</a>

# favomseom
<a href="https://github.com/vanodevium/go-framework-stars">https://github.com/vanodevium/go-framework-stars</a>
<a href="https://github.com/Correia-jpv/fucking-awesome-go">https://github.com/Correia-jpv/fucking-awesome-go</a>
<a href="https://github.com/zengzzzzz/golang-trending-archive">https://github.com/zengzzzzz/golang-trending-archive</a>

## ???

https://github.com/mattermost/mattermost/tree/server/public/v0.0.11
https://github.com/ollama/ollama
https://github.com/find-xposed-magisk/go-gost/tree/main

https://github.com/nucleuscloud/neosync

## LANGUAGE
<a href="https://github.com/goplus">https://github.com/goplus</a>

 

# github ile flowchart yapmak
<a href="https://github.com/instill-ai/pipeline-backend/blob/main/README.md">https://github.com/instill-ai/pipeline-backend/blob/main/README.md</a>

## fantastic
<a href="https://github.com/elanticrypt0/areyouonline">https://github.com/elanticrypt0/areyouonline</a>
App to check if a website is online or not

## DOCKer KUB
<a href="https://github.com/mikebellcoder/microservices-docker-go-mongodb/tree/main">https://github.com/mikebellcoder/microservices-docker-go-mongodb/tree/main</a>

## KUB

<a href="https://github.com/chaos-mesh/chaos-mesh">https://github.com/chaos-mesh/chaos-mesh</a>

## Deployment
<a href="https://github.com/devopscorner/golang-deployment">https://github.com/devopscorner/golang-deployment</a>

DRAFT

<a href="https://chris.bracken.jp/">https://chris.bracken.jp/</a>

</div>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>go free course</title>
		<link>https://selmantunc.com.tr/golang/go-free-course/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 04:54:37 +0000</pubDate>
				<category><![CDATA[bookmark]]></category>
		<category><![CDATA[golang]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3150</guid>

					<description><![CDATA[Adelina Simion https://www.linkedin.com/learning/level-up-go/using-github-codespaces-with-this-course?resume=false https://github.com/addetz]]></description>
										<content:encoded><![CDATA[<div class="instructor__info ">
<div class="instructor__name t-16 t-black"><strong>Adelina Simion</strong></div>
</div>
<p><a href="https://www.linkedin.com/learning/level-up-go/using-github-codespaces-with-this-course?resume=false">https://www.linkedin.com/learning/level-up-go/using-github-codespaces-with-this-course?resume=false</a></p>
<p><a href="https://github.com/addetz">https://github.com/addetz</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>go my awesome</title>
		<link>https://selmantunc.com.tr/golang/go-my-awesome/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 04:52:49 +0000</pubDate>
				<category><![CDATA[bookmark]]></category>
		<category><![CDATA[golang]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3148</guid>

					<description><![CDATA[Moq https://github.com/matryer/moq]]></description>
										<content:encoded><![CDATA[<p><strong>Moq</strong></p>
<p><a href="https://github.com/matryer/moq">https://github.com/matryer/moq</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>go test</title>
		<link>https://selmantunc.com.tr/golang/go-test/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 03 Aug 2023 04:52:17 +0000</pubDate>
				<category><![CDATA[bookmark]]></category>
		<category><![CDATA[golang]]></category>
		<guid isPermaLink="false">https://selmantunc.com.tr/?p=3146</guid>

					<description><![CDATA[Article https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl  top article github repo https://github.com/andyhaskell/orlango-testing-talk https://github.com/stnc-go/Test-Driven-Development-in-Go https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/tree/2.0.x https://github.com/mreinstein/alexa-verifier/blob/main/validate-cert.js https://github.com/stnc-go/go-alexa https://github.com/ericdaugherty/alexa-skills-kit-golang/blob/master/alexa.go#L163 https://github.com/stnc-go/alexa-go]]></description>
										<content:encoded><![CDATA[<p>Article</p>
<p><a href="https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl"><a href="https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl">https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl</a> </a></p>
<p>top article github repo <a href="https://github.com/andyhaskell/orlango-testing-talk">https://github.com/andyhaskell/orlango-testing-talk</a></p>
<hr />
<p><a href="https://github.com/stnc-go/Test-Driven-Development-in-Go">https://github.com/stnc-go/Test-Driven-Development-in-Go</a></p>
<hr />
<p><a href="https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl">https://dev.to/salesforceeng/intro-to-automated-testing-in-go-4mjl</a></p>
<hr />
<p><a href="https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/tree/2.0.x">https://github.com/alexa/alexa-skills-kit-sdk-for-nodejs/tree/2.0.x</a></p>
<hr />
<p><a href="https://github.com/mreinstein/alexa-verifier/blob/main/validate-cert.js">https://github.com/mreinstein/alexa-verifier/blob/main/validate-cert.js</a></p>
<hr />
<p><a href="https://github.com/stnc-go/go-alexa">https://github.com/stnc-go/go-alexa</a></p>
<hr />
<p><a href="https://github.com/ericdaugherty/alexa-skills-kit-golang/blob/master/alexa.go#L163">https://github.com/ericdaugherty/alexa-skills-kit-golang/blob/master/alexa.go#L163</a></p>
<hr />
<p><a href="https://github.com/stnc-go/alexa-go">https://github.com/stnc-go/alexa-go</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>golang code</title>
		<link>https://selmantunc.com.tr/golang/golang-code/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 11 May 2021 21:43:30 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://selmantunc.com.tr/2021/05/11/golang-code/</guid>

					<description><![CDATA[https://www.geeksforgeeks.org/minimum-number-of-bottles-required-to-fill-k-glasses/ Given N glasses having water, and a list A of each of their capacity. The task is to find the minimum number of bottles required to fill out exactly&#8230;]]></description>
										<content:encoded><![CDATA[<p><a href="https://www.geeksforgeeks.org/minimum-number-of-bottles-required-to-fill-k-glasses/">https://www.geeksforgeeks.org/minimum-number-of-bottles-required-to-fill-k-glasses/</a>
<br></p>
<p>Given N glasses having water, and a list A of each of their capacity. The task is to find the minimum number of bottles required to fill out exactly K glasses. The capacity of each bottle is 100 units.<br></p>
<p>

solution </p>
<p><a href="https://play.golang.org/p/31vrx6pzXUs">https://play.golang.org/p/31vrx6pzXUs

</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Sevdiğim go projeleri</title>
		<link>https://selmantunc.com.tr/golang/sevdigim-go-projeleri/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 06 Apr 2021 19:37:59 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[go]]></category>
		<guid isPermaLink="false">http://selmantunc.com.tr/2021/04/06/sevdigim-go-projeleri/</guid>

					<description><![CDATA[https://docs.gitea.io/en-us/ https://github.com/oxequa/realize#config-sample DOCKER  bunu upload ın silmesinde kullanablirm yada api işlerinde https://github.com/avelino/awesome-go#job-scheduler]]></description>
										<content:encoded><![CDATA[<h2><a href="https://docs.gitea.io/en-us/">https://docs.gitea.io/en-us/</a>
<br></h2>
<p><a href="https://github.com/oxequa/realize#config-sample">https://github.com/oxequa/realize#config-sample</a>
<br></p>
<p>DOCKER </p>
<p>bunu upload ın silmesinde kullanablirm yada api işlerinde </p>
<p><a href="https://github.com/avelino/awesome-go#job-scheduler">https://github.com/avelino/awesome-go#job-scheduler</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Golang tutorials web site</title>
		<link>https://selmantunc.com.tr/golang/golang-tutorials-web-site/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 05 Dec 2020 14:24:29 +0000</pubDate>
				<category><![CDATA[golang]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[go]]></category>
		<guid isPermaLink="false">http://selmantunc.com.tr/2020/12/05/golang-tutorials-web-site/</guid>

					<description><![CDATA[https://go101.org/article/101.html https://softwaredevvideos.tumblr.com/ go clean code  https://github.com/Pungyeon/clean-go-article  Tour of Go How to Write Go Code Effective Go —- Notes on the book Clean Code &#8211; A Handbook of Agile Software Craftsmanship&#8230;]]></description>
										<content:encoded><![CDATA[<p><a href="https://go101.org/article/101.html">https://go101.org/article/101.html</a>
<br></p>
<p><a href="https://softwaredevvideos.tumblr.com/">https://softwaredevvideos.tumblr.com/</a>
<br></p>
<p>go clean code </p>
<p><a href="https://github.com/Pungyeon/clean-go-article">https://github.com/Pungyeon/clean-go-article</a> </p>
<p><br></p>
<p><a href="https://tour.golang.org/">Tour of Go</a></p>
<p><a href="https://golang.org/doc/code.html">How to Write Go Code</a></p>
<p><a href="https://golang.org/doc/effective_go.html">Effective Go</a></p>
<p>—-</p>
<p>Notes on the book Clean Code &#8211; A Handbook of Agile Software Craftsmanship by Robert C. Martin<br></p>
<p><a href="https://github.com/jbarroso/clean-code#error-handling">https://github.com/jbarroso/clean-code#error-handling</a>
<br></p>
<p>—–</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
