2015-12-24 16 views
16

Git Dili'm yeniyim ve C/C++ 'da çok az geçmişe sahibim, bu yüzden işaretçilerin ne zaman kullanılacağını ve ne zaman işaretçi kullanmama fikriyle mücadele ediyorum. Bu soru açık uçlu olarak düşünülebilse de, yapıları ne zaman iade edeceğimi ve ne zaman işaretçiler döndüreceğini (ve argüman olarak yapıları/işaretçileri ne zaman kabul edeceklerini) anladım. Sanırım kadarıylaGolang: işaretçiler ne zaman kullanılmalı?

, aşağıdaki ifadeleri de geçerli:

  1. yapılar değeriyle fonksiyonlar aktarılır. Yani, bir yapının bir kopyası onu bir işleve geçirirken yapılır.
  2. Bir yapıyı referans olarak geçmek istiyorsam, bunun yerine işlev tanımında bir işaretçi argümanı kullanır ve işlevi çağırırken operatörün adresini kullanırdım.
  3. Referans olarak bir yapıya geçmek istememin nedeni, ya geçmekte olduğum yapı büyüktür ve bellekte vergilere göre değerini vermesi (olası değil) ya da (büyük olasılıkla) geçmekte olduğum kopyasında değişiklikler.
  4. 3) 'ün bir sonucu olarak, referans olarak geçmek için yukarıdaki nedenlerden birine sahip olmadıkça değeri geçmem gerekir.

Varsayımlarım doğru mu? Yoksa işaretçilerdeki işareti kaçırıyor muyum?

+1

Temel olarak bu - evet ya da hiç soru sormadığınızdan emin değilim. Re: # 2, Go'daki * her şeyin * değere göre geçtiğini ve bu durumda değere göre bir işaretçiyi geçireceğinizi hatırlamakta fayda var. – JimB

+0

Aslında bir Evet/Hayır sorusu, ama eğer hayır ise o zaman neyin yanlış olduğunu bilmek isterdim. Girdiniz için teşekkürler. 2 için, işaretçinin değer tarafından iletildiğini söylemek doğru mu, ancak işaretçiyi işaret ettiği nesneyi değiştirmek için bu işaretçiyi kullanıyoruz, ancak bir yapıda (bu yapıya işaretçi yerine) geçiş yaparsak sadece kopyayı değiştirebilir miyiz? –

+1

evet, haklısınız –

cevap

11

Varsayımlarınız doğru. # 3 Hakkında Go, eşzamanlı bir dildir ve goroutinler referans olarak geçerek, hepsinin güvenli olan aynı yapıyı okumasını sağlar, aynı zamanda tehlikeli olan aynı yapıyı değiştirmelerini sağlar.

İlgili konular