Saya telah mencoba:
const ascii = "abcdefghijklmnopqrstuvwxyz"
const letter_goodness []float32 = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
const letter_goodness = []float32 { .0817,.0149,.0278,.0425,.1270,.0223,.0202, .0609,.0697,.0015,.0077,.0402,.0241,.0675, .0751,.0193,.0009,.0599,.0633,.0906,.0276, .0098,.0236,.0015,.0197,.0007 }
Pertama, deklarasi dan inisialisasi berfungsi dengan baik, tetapi yang kedua, ketiga dan keempat tidak berfungsi. Bagaimana saya bisa mendeklarasikan dan menginisialisasi array array floats?
[...]T
sintaksnya adalah gula untuk[123]T
. Ini menciptakan array ukuran tetap, tetapi memungkinkan kompiler mengetahui berapa banyak elemen di dalamnya.f(xs [5]int)
Anda tidak akan tahu apakah array yang diteruskan adalah konstan atau dapat diubah.cannot use constants.FilesRequired (type [4]string) as type []string in argument to strings.Join
Dari Go Efektif :
Irisan dan array selalu dievaluasi selama runtime:
[...]
memberitahu kompiler untuk mencari tahu panjang array itu sendiri. Irisan membungkus array dan lebih mudah untuk dikerjakan dalam banyak kasus. Alih-alih menggunakan konstanta hanya membuat variabel tidak dapat diakses ke paket lain dengan menggunakan huruf kecil pertama:thisIsPrivate
hanya tersedia dalam paket yang ditentukan. Jika Anda memerlukan akses baca dari luar, Anda dapat menulis fungsi pengambil sederhana (lihat Getters di golang ).sumber
Tidak ada konstanta array di Go.
Mengutip dari Spesifikasi Bahasa Go: Konstanta :
Sebuah ekspresi Konstan (yang digunakan untuk menginisialisasi konstan) mungkin hanya berisi konstan operan dan dievaluasi pada waktu kompilasi.
Spesifikasi mencantumkan jenis konstanta yang berbeda. Perhatikan bahwa Anda dapat membuat dan menginisialisasi konstanta dengan ekspresi tipe konstan yang memiliki salah satu tipe yang diizinkan sebagai tipe yang mendasarinya . Misalnya ini valid:
Output (coba di Go Playground ):
Jika Anda membutuhkan sebuah array, itu hanya bisa berupa variabel, tetapi bukan konstanta.
Saya merekomendasikan artikel blog hebat ini tentang konstanta: Konstanta
sumber
var arr = [2]int{2, 3}
Seperti yang telah disebutkan orang lain, tidak ada konstruksi Go resmi untuk ini. Yang paling dekat yang bisa saya bayangkan adalah fungsi yang mengembalikan sepotong. Dengan cara ini, Anda dapat menjamin bahwa tidak ada yang akan memanipulasi elemen slice asli (karena "hard-coded" ke dalam array).
Saya telah mempersingkat irisan Anda untuk membuatnya ... lebih pendek ...:
sumber
cannot use [6]string literal (type [6]string) as type []string in return argument
jadireturn []float32 { ... }
...
sehingga mendeklarasikan slice literal alih-alih array literal. (2) ubah tipe pengembalian ke[6]float32
. (3) menetapkan ekspresi untuk variabel array,a := [...]float32 { (etc.) }
dan mengembalikan sepotong semua elemen:return a[:]
. (Array literal tidak dapat dialamatkan, saya tidak jelas mengapa.)