2017-07-09 41 views
1

在該示例中,一切正常。但他們不使用變量,並立即顯示它https://play.golang.org/p/O0XwtQJRej如何在切片中寫入函數的結果

但是我有一個問題:

package main 
import (
    "fmt" 
    "strings" 
) 

func main() { 
    str := "fulltext" 
    var slice []string 
    slice = strings.Split(str , "") 

    fmt.Printf("anwer: ", slice) 
} 

從哪裏來的答案有多餘的字符,例如

%! (EXTRA []字符串=

PS我知道我需要使用附加到元素添加到切片,但現在我不知道如何在這裏適用追加

UP: 現在我有答案:

前面回答:!%(EXTRA []字符串= [全文])

但我只需要:

[FüL L T E X T]

但我不明白,我應該怎麼更改我的代碼?

+0

(請注意,在該'%q' screen dump,參考[(godoc.org?)](https://godoc.org/fmt)獲取'fmt.Printf()'。) – greybeard

+0

@greybeard是的,我看到了這些字符,但是在我的他們缺少的代碼 – gotosystem

+0

你能澄清你的問題嗎? 「我不明白如何在這裏申請附加內容」是什麼意思。 'Split' func返回切片。 – jeevatkm

回答

0

給給printf預期的格式,在大多數情況下,%v是罰款。

package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    str := "fulltext" 
    var slice []string 
    slice = strings.Split(str, "") 

    fmt.Printf("anwer: %v", slice) 
} 

有關更多信息,請參閱https://golang.org/pkg/fmt/

2

的問題是不是與strings.Split()局部變量slice,這是完全正常的返回值的分配。

的問題是,您使用的fmt.Printf()這需要一個格式字符串,並根據其格式/代用品預計參數格式字符串。由於您的格式字符串不包含任何動詞,因此fmt.Printf()調用不需要任何參數,但您將它傳遞給一個參數,因此它會用這些額外字符(錯誤字符串類型)表示這種情況。

提供有效的格式字符串用於表明您將提供1個參數,切片:

fmt.Printf("answer: %v", slice) 

這樣,輸出是:

answer: [f u l l t e x t] 

或者選擇使用fmt.Println(),這不期望格式字符串:

fmt.Println("answer:", slice) 

(請注意,沒有空間後r冒號,因爲fmt.Println()如果其中一個是string類型,則在兩個值之間添加一個空格)。

輸出是一樣的。試試Go Playground上的示例。

fmt.Printf(),當參數涉及string值,該%q動詞往往更爲有用,因爲這將打印引號的字符串值,更容易發現某些錯誤(如不可見的字符,或者如果string包含空格,住將變得明顯):

fmt.Printf("answer: %q\n", slice) 

的這個(輸出嘗試在Go Playground):

answer: ["f" "u" "l" "l" "t" "e" "x" "t"] 

如果你想一PPEND一個函數調用的結果,這是怎麼可能看起來像:

slice := []string{"initial", "content"} 
slice = append(slice, strings.Split(str, "")...) 

fmt.Printf("answer: %q\n", slice) 

而且現在的輸出(嘗試在Go Playground):

answer: ["initial" "content" "f" "u" "l" "l" "t" "e" "x" "t"]