Rumah > pembangunan bahagian belakang > Golang > **Mengapa Saya Tidak Boleh Menghiris Nilai Pulangan Fungsi dalam Go?**

**Mengapa Saya Tidak Boleh Menghiris Nilai Pulangan Fungsi dalam Go?**

DDD
Lepaskan: 2024-10-24 21:16:29
asal
792 orang telah melayarinya

**Why Can't I Slice the Return Value of a Function in Go?**

Gelagat Berbeza antara Pembolehubah dan Nilai Pulangan dalam Fungsi

Apabila menggunakan fungsi dalam Go, adalah penting untuk memahami perbezaan antara pembolehubah dan nilai pulangan dari segi kebolehalamatan mereka dan kelakuan seterusnya.

Kod dan Ralat Asal

Pertimbangkan coretan kod berikut:

<code class="go">hash := sha1.Sum([]byte(uf.Pwd))
u.Pwhash = hex.EncodeToString(hash[:])</code>
Salin selepas log masuk

Kod ini berfungsi sebagai dijangka. Walau bagaimanapun, jika kami cuba menggabungkan dua baris:

<code class="go">u.Pwhash = hex.EncodeToString(sha1.Sum([]byte(uf.Pwd))[:])</code>
Salin selepas log masuk

kami menghadapi ralat berikut:

models/models.go:104: invalid operation sha1.Sum(([]byte)(uf.Pwd))[:] (slice of unaddressable value)
Salin selepas log masuk

Sebab Ralat

Ralat timbul kerana dalam baris gabungan, kami cuba memotong nilai pulangan fungsi sha1.Sum() secara langsung:

<code class="go">sha1.Sum(([]byte)(uf.Pwd))[:]</code>
Salin selepas log masuk

Nilai pulangan fungsi dalam Go tidak boleh ditangani. Menurut spesifikasi bahasa, nilai boleh dialamatkan termasuk pembolehubah, arahan penunjuk, operasi pengindeksan kepingan, pemilih medan bagi struktur boleh dialamat, operasi pengindeksan tatasusunan tatasusunan boleh dialamatkan dan, sebagai pengecualian, literal komposit. Menghiris tatasusunan memerlukan tatasusunan boleh dialamatkan.

Resolusi

Kod asal berfungsi kerana kami mula-mula menetapkan nilai pulangan sha1.Sum() kepada pembolehubah setempat (hash), yang menjadikan tatasusunan boleh dialamatkan dan dengan itu layak untuk dihiris. Oleh itu, biasanya disyorkan untuk menyimpan nilai pulangan dalam pembolehubah sebelum melaksanakan operasi padanya untuk mengelakkan ralat tersebut dan memastikan kebolehalamatan.

Atas ialah kandungan terperinci **Mengapa Saya Tidak Boleh Menghiris Nilai Pulangan Fungsi dalam Go?**. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan