Saya sedang belajar golang melalui buku "the go programming language", dalam Bab 5, Bahagian 5.3 (Multiple Return Values) Latihan 5.5, saya perlu melaksanakan fungsi countwordandimages
,该函数从 (golang.org/x/ net) 包中,并计算 html 文件中的单词和图像数量,我实现了以下函数,但出于某种原因,我收到每个 words
和 images
yang mengembalikan 0 berubah Bernilai .
func countWordsAndImages(n *html.Node) (words, images int) { if n.Type == html.TextNode { words += wordCount(n.Data) } else if n.Type == html.ElementNode && n.Data == "img" { // if tag is img on element node images++ } for c := n.FirstChild; c != nil; c = n.NextSibling { tmp_words, tmp_images := countWordsAndImages(c) words, images = words+tmp_words, images+tmp_images } return words, images } func wordCount(s string) int { n := 0 scan := bufio.NewScanner(strings.NewReader(s)) scan.Split(bufio.ScanWords) for scan.Scan() { n++ } return n }
Saya cuba mengelak menamakan tupel pembolehubah kembali ((int, int)
) dalam fungsi. (int, int)
)。
使用 c.nextsibling
前进到下一个兄弟,而不是 n.nextsibling
Gunakan c.nextsibling
untuk maju ke adik-beradik seterusnya dan bukannya n.nextsibling
:
for c := n.FirstChild; c != nil; c = c.NextSibling { ⋮
Atas ialah kandungan terperinci Apakah yang salah dengan fungsi rekursif saya yang ditulis dalam go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!