2014-01-30 6 views
20
package main 

import (
    "fmt" 
) 

func main() { 
    fmt.Println(say(9)) 
} 

func say(num int)(total string){ 
return fmt.Sprintf("There are %s reasons to code!", num) 
} 

meine Ausgabewie eine Zahl in einem String in golang

ist
There are %!s(int=9) reasons to code! 

zu interpolieren Was soll ich eine Zahl in einem String zu interpolieren tun?

+0

Mögliches Duplikat von [Golang: formatiert eine Zeichenfolge ohne zu drucken?] (Http://stackoverflow.com/questions/11123865/golang-format-a-string-without-printing) –

Antwort

30

Wenn Sie immer die "default" Darstellung ganz gleich welcher Art, %v verwenden, wie in

fmt.Sprintf("There are %v reasons to code!", num) 
11

Versuchen Sie %d anstelle von %s. Das d steht für dezimal.

Die entsprechende Dokumentation ist hier:

http://golang.org/pkg/fmt/

1

Der Ausgang verwenden möchten ist genau sagen was passiert und was du wissen musst!
wie Sie eine % sVerb versuchen, zu verwenden, die die Ausgabe Strings gemeint ist, sagt, dass:
!s(int=0) das bedeutet:

Der Wert ist nicht ein String, sondern ein Ganzzahl.

Wenn Sie also wissen wollen, was stattdessen zu verwenden, um einen Blick auf die fmt Paket Seite https://golang.org/pkg/fmt/ bei den „ganzen Zahlen“ nehmen Tabelle:

%b base 2 
%c the character represented by the corresponding Unicode code point 
%d base 10 
%o base 8 
%q a single-quoted character literal safely escaped with Go syntax. 
%x base 16, with lower-case letters for a-f 
%X base 16, with upper-case letters for A-F 
%U Unicode format: U+1234; same as "U+%04X" 

So können Sie jede dieser Verben haben der Ausgang korrekt dargestellt.
Oder wie vorherige Antworten sagen, können Sie auch das % v Verb verwenden, was bedeutet:
"der Wert in seinem Standardformat".

Verwandte Themen