Dalam perkhidmatan saya mempunyai rentetan yang dicincang seperti ini:
fun string.tohash(): long { var hashcode = this.hashcode().tolong() if (hashcode < 0l) { hashcode *= -1 } return hashcode }
Saya ingin meniru kod ini dalam perkhidmatan b yang ditulis dalam golang, jadi untuk perkataan yang sama saya mendapat cincangan yang sama. Setakat yang saya faham daripada dokumentasi kotlin, cincang yang digunakan mengembalikan integer 64-bit. Oleh itu, saya melakukan ini:
func hash(s string) int64 { h := fnv.new64() h.write([]byte(s)) v := h.sum64() return int64(v) }
Tetapi saya tidak mendapat nilai yang sama semasa melakukan ujian unit. Saya dapat:
func test_hash(t *testing.t) { tests := []struct { input string output int64 }{ {input: "papafritas", output: 1079370635}, } for _, test := range tests { got := hash(test.input) assert.equal(t, test.output, got) } }
Hasil:
7841672725449611742
Adakah saya melakukan sesuatu yang salah?
Java dan Kotlin menggunakan fungsi cincang yang berbeza daripada Go.
Pilihan yang mungkin adalah:
Atas ialah kandungan terperinci Pencincangan rentetan dalam Kotlin dan Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!