<?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>go-surum-yenilikleri arşivleri - Görkem Rıdvan ARIK</title>
	<atom:link href="https://gorkemarik.com/tag/go-surum-yenilikleri/feed/" rel="self" type="application/rss+xml" />
	<link>https://gorkemarik.com/tag/go-surum-yenilikleri/</link>
	<description>Yazılım Geliştirme &#38; Mühendislik</description>
	<lastBuildDate>Sat, 07 Dec 2024 16:49:19 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://gorkemarik.com/wp-content/uploads/2024/09/unnamed.jpg</url>
	<title>go-surum-yenilikleri arşivleri - Görkem Rıdvan ARIK</title>
	<link>https://gorkemarik.com/tag/go-surum-yenilikleri/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Go 1.21 Yenilikleri</title>
		<link>https://gorkemarik.com/programlama-dilleri/go/1-21-0/go-1-21-yenilikleri/</link>
					<comments>https://gorkemarik.com/programlama-dilleri/go/1-21-0/go-1-21-yenilikleri/#respond</comments>
		
		<dc:creator><![CDATA[Görkem Rıdvan ARIK]]></dc:creator>
		<pubDate>Tue, 05 Sep 2023 20:57:08 +0000</pubDate>
				<category><![CDATA[1.21.0]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[Programlama Dilleri]]></category>
		<category><![CDATA[go]]></category>
		<category><![CDATA[go 1.21 yenilikleri]]></category>
		<category><![CDATA[go 1.21.0]]></category>
		<category><![CDATA[go-surum-yenilikleri]]></category>
		<category><![CDATA[golang]]></category>
		<category><![CDATA[golang 1.21.0]]></category>
		<guid isPermaLink="false">https://gorkemarik.com/?p=170</guid>

					<description><![CDATA[<p>Merhaba, bu yazıda Go programlama diline Ağustos ayında gelen 1.21 sürümündeki yenilik ve güncellemeleri örnek kullanımlarla birlikte değineceğim.</p>
<p><a href="https://gorkemarik.com/programlama-dilleri/go/1-21-0/go-1-21-yenilikleri/">Go 1.21 Yenilikleri</a> yazısı ilk önce <a href="https://gorkemarik.com">Görkem Rıdvan ARIK</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Merhaba, bu yazıda Go programlama diline Ağustos ayında gelen 1.21 sürümündeki yenilik ve güncellemeleri örnek kullanımlarla birlikte değineceğim.</p>



<h3 class="wp-block-heading" id="dil-degisiklikleri"><a href="#dil-degisiklikleri">Dil Değişiklikleri</a></h3>



<p>Go 1.21 sürümü ile <strong><em>min</em></strong>, <strong><em>max </em></strong>ve <strong><em>clear</em></strong> olmak üzere 3 yeni yerleşik (built-in) fonksiyon eklendi. İsimlerinden de anlaşılacağı üzere <strong><em>min</em></strong> fonksiyonu kendisine parametre olarak verilen değerler arasından en küçük olanı döndürürken <strong><em>max </em></strong>fonksiyonu kendisine verilen parametreler arasından en büyük değeri döndürmektedir. <strong><em>clear</em></strong> fonksiyonu ise parametre olarak <em>map</em>, <em>slice </em>ve <em>type parameter</em> alarak bunların tüm öğelerini siler veya sıfırlar. Bu fonksiyonlara birer örnek verecek olursak;</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">x := min(1, -5, 3, 2, 0)
fmt.Println(x)
// Output: -5

y := max(1, -5, 3, 2, 0)
fmt.Println(y)
// Output: 3

cities := map[string]int{
 "Adana":  1,
 "Ankara": 6,
 "Istanbul": 34,
}
fmt.Println(cities)
clear(cities)
fmt.Println(cities)
// Output: 
// map[Adana:1 Ankara:6 Istanbul:34]
// map[]</pre></div>



<h3 class="wp-block-heading" id="go-komutu-flag-guncellemeleri"><a href="#go-komutu-flag-guncellemeleri">Go Komutu ve Flag Güncellemeleri</a></h3>



<ul class="wp-block-list">
<li>-pgo derleme flag&#8217;i varsayılan olarak -pgo=auto olarak ayarlandı. </li>



<li>Komut satırında yalnızca tek bir ana paketi belirtme kısıtlaması kaldırıldı. </li>



<li>Ana paketin dizininde default.pgo adında bir dosya bulunuyorsa bu dosya otomatik olarak optimizasyonu etkinleştirmek için kullanılacak.</li>



<li><code>go test</code> komutu için <strong>-fullpath</strong> parametresi eklendi. Bu sayede log mesajlarında tam yolun yazdırılma opsiyonu eklendi.</li>
</ul>



<h3 class="wp-block-heading" id="derleyici"><a href="#derleyici">Derleyici</a></h3>



<ul class="wp-block-list">
<li>Go 1.20 sürümünde önizleme olarak eklenen profile-guide optimization (PGO) 1.21.0 sürümü ile birlikte genel kullanıma hazır hale getirildi. Bununla birlikte temsili bir Go programında PGO etkinleştirilirse %2 ile %7 arasında iyileşme görülebileceği belirtiliyor. PGO hakkında daha detaylı bilgi için <a href="https://go.dev/doc/pgo" target="_blank" rel="noreferrer noopener">bağlantıdan</a> dokümanlara ulaşabilirsiniz.</li>



<li>Ayrıca Go 1.21.0 sürümü ile derleyicinin kendisini PGO ile oluşturması sayesinde build alma hızının %6&#8217;ya kadar arttığı belirtiliyor.</li>
</ul>



<h3 class="wp-block-heading" id="yeni-kutuphane-paketleri"><a href="#yeni-kutuphane-paketleri">Yeni Kütüphane Paketleri</a></h3>



<h4 class="wp-block-heading" id="log-slog-paketi"><a href="#log-slog-paketi">log/slog Paketi</a></h4>



<p>Yeni paketin popüler log analiz araçları ve servisler ile entegre desteği olmasıyla beraber Go&#8217;da loglama işlemleri için kullanılan 3. parti kütüphanelerin kullanımı azalacak gibi görünüyor. Yapısal loglama (<strong>structured logging</strong>) anahtar/değer çiftleri ile gerçekleştirildiğinden dolayı büyük miktardaki log kayıtlarının hızlı ve doğru bir şekilde işlenmesi sağlanıyor.</p>



<p>Paket için ufak bir örnek yapacak olursak aşağıdaki kullanılan Info fonksiyonunun imzası <em><strong>slog.Info(msg string, args &#8230;any)</strong> </em>şeklindedir. Görüldüğü üzere ilk parametre log mesajıdır. diğer parametreler ise anahtar-değer çiftlerini temsil eder. </p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package main

import "log/slog"

func main() {
	slog.Info("Yetkisiz erişim", "Ad", "John", "Soyad", "Doe")
}
// Output: 
// 2023/09/05 21:07:14 INFO Yetkisiz erişim Ad=John Soyad=Doe</pre></div>



<p>Ayrıca çıktı formatında daha çok hakimiyet için <strong><em>slog.New(h handler) *Logger</em></strong> imzalı bir fonksiyon da bulunuyor. Bu fonksiyon ile ihtiyaç duyulan handler belirtilerek logger örneği oluşturulabiliyor. Örneğin alttaki örnekte <a href="https://pkg.go.dev/log/slog@master#JSONHandler" target="_blank" rel="noreferrer noopener">JSONHandler</a> kullanarak bir logger örneği bulunuyor.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package main

import (
	"log/slog"
	"os"
)

func main() {
	logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
	logger.Info("Yetkisiz erişim", "Ad", "John", "Soyad", "Doe")
}

// Output:
// {"time":"2023-09-05T21:10:29.2848066+03:00","level":"INFO","msg":"Yetkisiz erişim","Ad":"John","Soyad":"Doe"}</pre></div>



<p>Örnekler ve slog paketi hakkında detaylı bilgi için <strong><a href="https://pkg.go.dev/log/slog@master" target="_blank" rel="noreferrer noopener">dokümanları</a> </strong>inceleyebilirsiniz.</p>



<h4 class="wp-block-heading" id="testing-slogtest-paketi"><a href="#testing-slogtest-paketi">testing/slogtest Paketi</a></h4>



<p>Bu paketin slog.Handler implementasyonlarını doğrulamaya yardımcı olabilmesi amacıyla eklendiği belirtiliyor. Paketin içerisinde <strong><em>func TestHandler(h slog.Handler, results func() []map[string]any) error</em></strong> imzasına sahip bir fonksiyon bulunuyor. Bu fonksiyon kullanıldığı takdirde yanlış giden bir durum olduğunda oluşan hataların her birini error.Join ile birleştirerek döndürülür. </p>



<p>Yalnızca TestHandler fonksiyonu bulunan bu paket için detayları ve örnekleri incelemek isterseniz <a href="https://pkg.go.dev/testing/slogtest@master" target="_blank" rel="noreferrer noopener"><strong>paket </strong></a><strong><a href="https://pkg.go.dev/testing/slogtest@master" target="_blank" rel="noreferrer noopener">dokümanlarını</a> </strong>inceleyebilirsiniz.</p>



<h4 class="wp-block-heading" id="slices-paketi"><a href="#slices-paketi">slices&nbsp;Paketi</a></h4>



<p>Adından da anlaşılacağı üzere yeni slices paketi slice yapısı için birçok yeni fonksiyon içermektedir. Bu fonksiyonlardan başlıcalarından birkaç tane örnek vereceğim.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package main

import (
	"fmt"
	"slices"
)

func main() {
	numbers := []int{0, 42, -10, 8}

	// Min: Parametre olarak verilen slice içerisindeki
	// en küçük elemanı döndürür.
	fmt.Println(slices.Min(numbers))
	//Output: -10

	// Max: Parametre olarak verilen slice içerisindeki
	// en büyük elemanı döndürür.
	fmt.Println(slices.Max(numbers))
	// Output: 42

	// Insert: İlk parametrede verilen slice içerisine
	// ikinci parametrede verilen index değerine 3. ve
	// diğer parametrelerdeki sayıları sırası ile ekler.
	fmt.Println(slices.Insert(numbers, 1, 1, 2))
	// Output: [0 1 2 42 -10 8]

	// Index: 2. parametrede verilen değer ilk parametrede verilen
	// slice içinde bulunuyorsa index'i döndürür.
	// Bulunmuyorsa -1 değerini döndürür.
	fmt.Println(slices.Index(numbers, -5))
	// Output: -1

	// Sort: Parametre olarak verilen slice'ı küçükten büyüğe sıralar
	slices.Sort(numbers)
	fmt.Println(numbers)
	// Output: [-10 0 8 42]

	// Reverse: Parametre olarak verilen slice'ı tersine çevirir
	slices.Reverse(numbers)
	fmt.Println(numbers)
	// Output: [42 8 0 -10]

	// Delete: İlk parametrede verilen slice içerisinden
	// [1:3] elemanlarını siler. (1 dahil, 3 dahil değil)
	fmt.Println(slices.Delete(numbers, 1, 3))
	// Output: [42 -10]
}</pre></div>



<p>slices paketindeki diğer örnekleri, fonksiyonları ve detayları incelemek için lütfen <strong><a href="https://pkg.go.dev/slices@master" target="_blank" rel="noreferrer noopener">dokümanları</a> </strong>inceleyin. </p>



<h4 class="wp-block-heading" id="maps-paketi"><a href="#maps-paketi">maps Paketi</a></h4>



<p>Bu paket de adından anlaşılacağı üzere map yapısı üzerinde birtakım operasyonlar olan <strong><em>Clone, Copy, DeleteFunc, Equal ve EqualFunc</em> </strong>fonksiyonlarını içerir. Birkaç kullanım örneği vermek gerekirse:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package main

import (
	"fmt"
	"maps"
)

func main() {
	m := map[string]int{
		"one":   1,
		"two":   2,
		"three": 3,
		"four":  4,
	}

	// Clone: Parametre olarak verilen map'in bir kopyasını döndürür.
	fmt.Println(maps.Clone(m))
	// Output: map[four:4 one:1 three:3 two:2]

	// Copy: 2. parametrede verilen map'in anahtar/değer eşlerini
	// 1. parametrede verilen map'e eşitler. Kopyalanan map içerisinde
	// çakışma varsa yeni değerler eski değerlerin üzerine yazılır.
	copied := map[string]int{}
	maps.Copy(copied, m)
	fmt.Println(copied)
	// Output: map[four:4 one:1 three:3 two:2]

	// Equal: Parametre olarak verilen 2 map'in değerlerinin aynı
	// olup olmadığını karşılaştırır.
	fmt.Println(maps.Equal(m, map[string]int{"İstanbul": 34}))
	// Output: false

	// DeleteFunc: map için silme kurallarını belirleyeceğimiz
	// fonksiyonlar tanımlamamızı sağlar. Dokümanda verilen örnekte
	// tek değerleri silmek için aşağıdaki şekilde fonksiyon yazılabilir.
	maps.DeleteFunc(m, func(k string, v int) bool {
		return v%2 != 0
	})
	fmt.Println(m)
	// Output: map[four:4 two:2]
}</pre></div>



<h4 class="wp-block-heading" id="cmp-paketi"><a href="#cmp-paketi">cmp Paketi</a></h4>



<p>Bu paket Ordered (sıralı) değerler arasında karşılaştırma yapılabilmesini sağlayan <strong><em>Ordered</em></strong> type&#8217;ı ile <em><strong>Compare, Less</strong></em> fonksiyonlarını içerir. Dokümanlara göre <em>Ordered </em>type&#8217;ı &lt;, &lt;=, &gt;= ve &gt; operatörlerini destekleyen tipleri içeren türdür. </p>



<p><em>Compare</em> fonksiyonu ilk parametre ikinciden azsa -1, eşitse 0 ve fazlaysa 1 değerlerini döndürür.</p>



<p><em>Less</em> fonksiyonu ilk parametre ikinci parametreden azsa <em><strong>true</strong></em> değerini döndürür.</p>



<p>Birer örnek vermek gerekirse:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package main

import (
	"cmp"
	"fmt"
)

func main() {
	fmt.Print(cmp.Compare(1, 2))
	fmt.Print(cmp.Compare(1, 1))
	fmt.Print(cmp.Compare(2, 1))
	// Output:-101
}</pre></div>



<h3 class="wp-block-heading" id="web-assembly"><a href="#web-assembly">Web Assembly</a></h3>



<p>Ayrıca Go 1.21.0 sürümü ile WebAssembly ortamında Go dilini daha işlevsel ve esnek kullanmak için ilk adımlar atıldı. Dokümana göre özellikle asenkron olaylarda sık sık bloke olan uygulamalarda etkileşim daha verimli hale gelerek WebAssembly ortamında çalışan uygulamalar için performans artabilir.</p>



<p>Eklenen deneysel port ile (GOOS=wasip1, GOARCH=wasm) WebAssembly ortamında WASI (WebAssembly System Interface) kullanılabilir.</p>
<p><a href="https://gorkemarik.com/programlama-dilleri/go/1-21-0/go-1-21-yenilikleri/">Go 1.21 Yenilikleri</a> yazısı ilk önce <a href="https://gorkemarik.com">Görkem Rıdvan ARIK</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gorkemarik.com/programlama-dilleri/go/1-21-0/go-1-21-yenilikleri/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
