スライスの要素を数えるための単純な関数を作成しようとしています(lenのように)単純な(追加のライブラリなしで)、再帰を伴う必要があります。問題は、スライスが空であることを確認しようとするときです(ヌルです)。自分のlen関数がGoで再帰を伴う
package main
import "fmt"
func main() {
x := []int{1, 2, 3}
fmt.Println(len2(x))
}
func len2(s []int) int {
if s == nil {
return 0
}
return 1 + len2(s[1:])
}
結果は、この例では '3'になるはずです。
場合の==はnilで壊れて:あなたは有効な終了条件を持っていないので、それはパニック
panic: runtime error: slice bounds out of range
私は自分のlenをビルドすることを忘れました。私はビルドインlen関数を使用することはできません。 –
あなたは単にこれを行うことはできません**。これは完全に不可能です:再帰は終了しなければなりません(あなたのコードで 's == nil'の場合)、これは組み込みのlen関数でのみ行うことができます。 – Volker