我正在從“Head First Go”學習 Go 語言,并在第 2 章中遇到了一個例子
package main
import (
"fmt"
"strings"
)
func main(){
var broken string = "Go# R#cks!"
//**Below line doesn't work, getting error as shown after the program :**-
var replacer strings.Replacer = strings.NewReplacer("#", "o")
// Whereas this line works perfectly
replacer := strings.NewReplacer("#", "o")
var fixed string = replacer.Replace(broken)
fmt.Println(replacer.Replace(fixed))
}
命令列引數 ./hello.go:10:6: 不能在賦值中使用 strings.NewReplacer("#", "o")(型別 *strings.Replacer)作為型別 strings.Replacer
uj5u.com熱心網友回復:
strings.NewReplacer("#", "o")回傳指標*strings.Replacer。所以這條線應該是
var replacer *strings.Replacer = strings.NewReplacer("#", "o")
作業程式鏈接:https : //play.golang.org/p/h1LOC-OUoJ2
uj5u.com熱心網友回復:
的定義strings.NewReplacer是func NewReplacer(oldnew ...string) *Replacer。因此,該函式回傳一個指標到代用品(見游的指標更多)。
在該陳述句中,var replacer strings.Replacer = strings.NewReplacer("#", "o")您正在定義一個具有該型別的變數,strings.Replacer然后嘗試為其分配一個型別的值*strings.Replacer。由于這是兩種不同的型別,編譯器會報告錯誤。解決方法是使用正確的型別var replacer *strings.Replacer = strings.NewReplacer("#", "o")(playground)。
replacer := strings.NewReplacer("#", "o")作業正常,因為當使用短變數宣告時,編譯器會*strings.Replacer為您確定型別 ( )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334881.html
