In Go'da, struct
değerini veya bunun bir bölümünü döndürmenin çeşitli yolları vardır. Gördüğüm bireysel olanlar için: bunlar arasındaki farkları anlıyorum. İlk yapının bir kopyasını döndürür, ikincisi işlev içinde oluşturulmuş yapı değerine bir işaretçi, üçüncüsü varolan bir yapının geçirilip değeri geçersiz kıldığını bekler.Parametre ve dönüş değerlerinde göstergeler ve değerler
Bu kalıpların çeşitli bağlamlarda kullanıldığını gördüm, bunlarla ilgili en iyi uygulamaların neler olduğunu merak ediyorum. Ne zaman kullanırsın? Örneğin, ilk yapı küçük yapılar için iyi olabilir (çünkü havai minimumdur), ikincisi büyük olanlar için. Ve üçüncüsü son derece bellek verimli olmak istiyorsanız, çünkü aramalar arasında tek bir yapı örneğini kolayca yeniden kullanabilirsiniz. Hangi zaman kullanacağınız için en iyi yöntemler var mı?
Benzer şekilde, dilimler ilişkin aynı soru:
func myfunc() []MyStruct {
return []MyStruct{ MyStruct{Val: 1} }
}
func myfunc() []*MyStruct {
return []MyStruct{ &MyStruct{Val: 1} }
}
func myfunc(s *[]MyStruct) {
*s = []MyStruct{ MyStruct{Val: 1} }
}
func myfunc(s *[]*MyStruct) {
*s = []MyStruct{ &MyStruct{Val: 1} }
}
Tekrar: Buradaki en iyi uygulamalar nelerdir. Dilimlerin her zaman işaretçi olduğunu biliyorum, bu yüzden bir dilim için bir işaretçi döndürmek yararlı değildir. Bununla birlikte, bir dilim yapı değeri döndürmeli, yapılara işaretçi dilimi, argüman olarak bir işaretçiye (Go App Engine API'da kullanılan bir desen) bir işaretçiyi göstermeli miyim?
Söylediğiniz gibi, gerçekten kullanım durumuna bağlıdır. Bütün bunlar duruma bağlı olarak geçerlidir - bu mutable bir nesne midir? bir kopya mı işaret mi istiyoruz? vb BTW kullanarak '' yeni (MyStruct) '' demeden bahsetmediniz :) Ancak, gerçekten farklı şekillerde gönderme ve geri gönderme yöntemleri arasında bir fark yoktur. –
Bu, kelimenin tam anlamıyla mühendislik üzerindedir. Yapılar oldukça büyük olmalı, bir işaretçi döndürmek programınızı daha hızlı hale getirir. Sadece rahatsız etmeyin, kod, profil, işe yararsa düzeltin. – Volker
Bir değer veya işaretçi döndürmenin tek bir yolu vardır; bu bir değer veya bir işaretçi döndürmektir. Onları nasıl ayırdığınız ayrı bir konudur. Durumunuz için neyin işe yaradığını kullanın ve endişelenmeden önce bazı kodları yazın. – JimB