Mengapakah Saya Tidak Boleh Menghiris Nilai Pulangan Fungsi dalam Go?

DDD
Lepaskan: 2024-10-24 18:25:33
asal
668 orang telah melayarinya

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

Memahami Pembolehubah dan Kelakuan Nilai Pulangan dalam Go

Isu biasa timbul apabila cuba untuk menyertai baris kod yang melibatkan tatasusunan dan panggilan fungsi . Sebagai contoh, pertimbangkan kod asal berikut yang berjaya menggabungkan dua baris:

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

Walau bagaimanapun, jika anda cuba menggabungkan kod itu menjadi satu baris, anda mungkin menghadapi mesej ralat:

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

Mesej ralat menunjukkan masalah dengan menghiris nilai pulangan panggilan fungsi. Dalam Go, nilai pulangan bagi panggilan fungsi, seperti nilai daripada sha1.Sum(), tidak boleh ditangani.

Untuk memahami gelagat ini, adalah penting untuk mengetahui jenis yang boleh dialamatkan dalam Go. Menurut spesifikasi Go, hanya yang berikut boleh dialamatkan:

  • Pembolehubah
  • Arahan penunjuk
  • Operasi pengindeksan kepingan bagi struct boleh dialamatkan
  • Pengindeksan tatasusunan operasi tatasusunan boleh alamat
  • Tersurat komposit (dikecualikan daripada keperluan kebolehalamatan)

Memandangkan nilai pulangan sha1.Sum() bukan salah satu daripada jenis ini, ia tidak boleh dihiris. Menghiris tatasusunan, seperti yang diperlukan di sini, memerlukan tatasusunan itu boleh dialamatkan.

Dalam baris pertama kod asal, tatasusunan yang dikembalikan disimpan dalam pembolehubah setempat (cincang), yang boleh dialamatkan. Dalam baris kedua, hex.EncodeToString(hash[:]) dikira, yang berfungsi seperti yang dimaksudkan.

Perbezaan antara pembolehubah dan nilai pulangan ini menyerlahkan kepentingan memahami peraturan menangani Go. Dengan mengikut peraturan ini, anda boleh mengelakkan ralat biasa dan menulis kod yang lebih mantap.

Atas ialah kandungan terperinci Mengapakah 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!