Go lang functions ( fonksiyonlar ) : Bir veya birden çok eylemi gerçekleştirmek için yazılan ve ana programa parametre ve fonksiyon dönüş değeri ile bağlı olan alt programdır.Programlamada kod yazarken fonksiyon kullanımı olmazsa olmazlardandır.Peki Go dilinde fonksiyon kullanımı var mı?
Tabi ki var.

Go (golang) İlk fonskiyonumuzu yazalım

package main
import "fmt"
func carp(x, y int) int  {
	return x * y
}
func main() {
	fmt.Println(carp(8, 5))
}
//40 çıktısını elde ederiz.

Kodumuzu sırasıyla açıklayalım.

- func carp(x, y int) int {..
Bu satırda function carp(... ile çarp adında bir fonksiyon tanımladık.
( x,y int ) adlarında iki adet int argümanı kullandık.Diğer kullanım şekli ise x int , y int şeklindedir.
int : sayısal değerli değişkenleri tanımlamak için kullanılırlar.
- return x*y
Bu kod satırında x ve y argümanlarının birbirleriyle çarpılması gerektiğini belirttik.
- fun main(){..
Main fonksiyonumuzu başlattık.
main fonksiyonumuzu mutlaka kullanmamız gerekiyor; aksi durumda programınız hata verir.

- fmt.Println(carp(8, 5))
Bu satırda fmt.Println(.. ile ekrana bir çıktı yazdıracağımızı belirttik,
carp(8,5) ile de carp fonksiyonunu çalıştırıp ekrana çıktısını yazdırmış olduk.

Argümanları değişken gibi kullanma

Go dilinde belirttiğiniz fonksiyon arümanlarını sanki bir değişkenmiş gibi kullanabilirsiniz.Örnek ile açıklayalım.
package main
import "fmt"
func carp(kosulsayisi int) (x, y int) {
	x = kosulsayisi * 2
	y = kosulsayisi * 4
	return
}
func main() {
	fmt.Println(carp(5))
}
//10 20 çıktısını elde ederiz

Yukarıdaki koda dikkatlice bakın x ve y argümanlarını kosulsayisi argümanının alacağı değere göre tanımladık.
- x = kosulsayisi * 2 burada kosulsayisi : carp(5) olarak tanımlandığından sonuç x = 5 * 2 yani 10 oldu.
- y = kosulsayisi * 4 burada kosulsayisi : carp(5) olarak tanımlandığından sonuç y = 5 * 4 yani 20 oldu.
Bonus örnek
package main
import "fmt"
func carp(x, y int) int  {
	x=8
	y=5
	return x*y
}
func main() {
	fmt.Println(carp(1,1))
}
//40 çıktısını elde ederiz.

Peki neden carp() değil de carp(1,1) bu tamamen Go dilinin kendi kurallarıyla ilgili birşey.
- Siz oraya carp(9,5) deseniz de 40 sonucunu elde edeceksiniz.
- Sadece carp() derseniz şu hatayı alırsınız :
./prog.go:9:18: not enough arguments in call to carp

have ()

want (int, int)

BONUS : Bu kodu Javascript dilinde yazalım

function carp(x,y){
x=8;
y=5;
return x*y
}
alert(carp())
//40 çıktısını elde ederiz.

Çalıştır Gördüğünüz gibi dillerin kendi kuralları var.

Çoklu sonuçlar

Go fonksiyonları birden fazla değer döndürme yeteneğine sahiptir. Doğru! Bu, çoğu programlama dilinin yerel olarak desteklemediği bir şeydir.
package main

import "fmt"

func yerdegistir(x, y string) (string, string) {
	return y, x
}

func main() {
	a, b := yerdegistir("Ankara", "Türkiye")
	fmt.Println(a, b)
}
//Ekrana çıktı olarak Türkiye Ankara yazılır.

Yukarıdaki kodları açıklamaya çalışalım :
- func yerdegistir(x, y string) (string, string) {..
Bu satırda yerdegistir adında bir fonksiyon oluşturduk ve x ve y adında iki string argümanı ekledik.
Dikkat ettiyseniz (x, y string) string yerine (x, y string) (string, string) yazdık.
Bunun nedeni return y,x işlemini yani x ve y argümanlarının yerini değiştirmek istediğimiz içindir.
Şayet biz bu iki argümanı return x+y biçiminde birleştirmek gibi bir işlem yapmak isteseydik (x, y string) string gibi bir kullanım yapabilirdik.

- a, b := yerdegistir("Ankara", "Türkiye")
Bu satırda ise a ve b adında iki değişken belirledik ve yerdegistir fonksiyonunu çalıştırıp argümanları a ve b değişkenlerine tanımladık.

- Son olarak fmt.Println(a, b) kodu ile de ekrana " Türkiye Ankara " yazdırdık.