目次
Go 言語のいくつかの出力メソッドの違い
Printf フォーマットの出力を使用します
1 、一般的なプレースホルダー:
2、ブール値:
3、整数値:
4. 浮動小数点数と複素数:
5. 文字列とバイトのスライス表現:
6. ポインタ:
7. %v のデフォルトの形式は次のとおりです:
8. 複合オブジェクトの場合:
9、幅と精度:
10. その他のフラグ:
11. パラメータ プレースホルダの表示:
12. 書式設定エラー:
出力例
ホームページ バックエンド開発 Golang Go言語の出力メソッドには何がありますか?

Go言語の出力メソッドには何がありますか?

Jan 04, 2023 pm 08:20 PM
golang 言語を移動

出力メソッド: 1. Print() 関数、コンソールに出力可能 (フォーマットは受け入れられません)、構文 "fmt.Print(str)"; 2. Println() 関数、これは次のとおりです。コントロールステーションへの出力と改行、構文は「fmt.Println(tmp)」です; 3. Printf() 関数はフォーマットされた文字列のみを出力できます; 4. Sprintf() 関数はフォーマットして文字列を返すことができます; 5. Fprintf()関数。フォーマットして「io.Writers」に出力できます。

Go言語の出力メソッドには何がありますか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

Go 言語のいくつかの出力メソッドの違い

Print、Println、Printf <strong>Sprintf</strong> Fprintf はすべて fmt パッケージのパブリック メソッドです。これらの関数は情報を出力するときに使用する必要があります。では、これらの関数の違いは何でしょうか?

Print:   输出到控制台(不接受任何格式化,它等价于对每一个操作数都应用 %v)
         fmt.Print(str)
Println: 输出到控制台并换行
         fmt.Println(tmp)
Printf : 只可以打印出格式化的字符串。只可以直接输出字符串类型的变量(不可以输出整形变量和整形 等)
         fmt.Printf("%d",a)
Sprintf:格式化并返回一个字符串而不带任何输出。
         s := fmt.Sprintf("a %s", "string") fmt.Printf(s)
Fprintf:格式化并输出到 io.Writers 而不是 os.Stdout。
         fmt.Fprintf(os.Stderr, “an %s\n”, “error”)
ログイン後にコピー

通常、出力情報をフォーマットする必要がある場合は Printf を選択し、それ以外の場合は Println

Printf フォーマットの出力を使用します

1 、一般的なプレースホルダー:

v     值的默认格式。
%+v   添加字段名(如结构体)
%#v  相应值的Go语法表示 
%T    相应值的类型的Go语法表示 
%%    字面上的百分号,并非值的占位符 
ログイン後にコピー

2、ブール値:

%t   true 或 false
ログイン後にコピー

3、整数値:

%b     二进制表示 
%c     相应Unicode码点所表示的字符 
%d     十进制表示 
%o     八进制表示 
%q     单引号围绕的字符字面值,由Go语法安全地转义 
%x     十六进制表示,字母形式为小写 a-f 
%X     十六进制表示,字母形式为大写 A-F 
%U     Unicode格式:U+1234,等同于 "U+%04X"
ログイン後にコピー

4. 浮動小数点数と複素数:

%b     无小数部分的,指数为二的幂的科学计数法,与 strconv.FormatFloat中的 &#39;b&#39; 转换格式一致。例如 -123456p-78 
%e     科学计数法,例如 -1234.456e+78 
%E     科学计数法,例如 -1234.456E+78 
%f     有小数点而无指数,例如 123.456 
%g     根据情况选择 %e 或 %f 以产生更紧凑的(无末尾的0)输出 
%G     根据情况选择 %E 或 %f 以产生更紧凑的(无末尾的0)输出
ログイン後にコピー

5. 文字列とバイトのスライス表現:

%s     字符串或切片的无解译字节 
%q     双引号围绕的字符串,由Go语法安全地转义 
%x     十六进制,小写字母,每字节两个字符 
%X     十六进制,大写字母,每字节两个字符
ログイン後にコピー

6. ポインタ:

%p     十六进制表示,前缀 0x
ログイン後にコピー

ここには「u」タグはありません。整数が符号なしタイプの場合、それらは符号なしとして出力されます。同様に、オペランドのサイズ (int8、int64) を指定する必要はありません。

7. %v のデフォルトの形式は次のとおりです:

bool:                    %t 
int, int8 etc.:          %d 
uint, uint8 etc.:        %d, %x if printed with %#v
float32, complex64, etc: %g
string:                  %s
chan:                    %p 
pointer:                 %p
ログイン後にコピー

デフォルトの出力形式は、出力がそうでない限り、%v を使用して指定できることがわかります。デフォルトとは異なる他の形式の場合は、代わりに %v を使用できます (ただし、お勧めしません)

8. 複合オブジェクトの場合:

内部の要素は次のとおりです。次のように使用されます 印刷規則:

struct:            {field0 field1 ...} 
array, slice:      [elem0 elem1 ...] 
maps:              map[key1:value1 key2:value2] 
pointer to above:  &{}, &[], &map[]
ログイン後にコピー

9、幅と精度:

幅は % の後の値です。指定されていない場合は、値のデフォルト値が使用されます。が使用され、精度は幅に続く値です。指定しない場合は、出力される値のデフォルトの精度が使用されます。例: %9.2f、幅 9、精度 2

%f:      default width, default precision 
%9f      width 9, default precision 
%.2f     default width, precision 2 
%9.2f    width 9, precision 2 
%9.f     width 9, precision 0
ログイン後にコピー

数値の場合、幅は数値が占める領域の最小幅であり、精度は小数点以下の桁数です。ただし、%g/%G の場合、精度は合計桁数です。たとえば、123.45 の場合、%6.2f 形式では 123.45 が出力され、%.4g では 123.5 が出力されます。 %e と %f のデフォルトの精度は 6 ですが、 %g のデフォルトの精度は、値を決定するために必要な最小桁数です。

ほとんどの値では、幅は出力する最小文字数であり、書式設定されたフォームで必要に応じてスペースが埋められます。文字列の場合、精度は出力される文字の最大数であり、必要に応じて直接切り捨てられます。

Width は「必要な最小幅」を指し、結果文字列の幅が指定幅を超える場合、指定幅は無効となります。

幅を「*」として指定した場合、幅の値はパラメータから取得されます。

「.」の直後の数字列は精度を表します(「.」のみの場合は「.0」)。整数標識 (`d'、`i'、`b'、`o'、`x'、`X'、`u') が見つかった場合、精度は数値部分の長さを示します

浮動小数点標識 (`f') が見つかった場合、それは小数部の桁数を表します。

浮動小数点標識 (`e'、`E'、`g'、`G') が見つかった場合、それは有効桁数を示します

精度が設定されている場合` *' にすると、精度の値がパラメータから抽出されます。

文字列 %s または浮動小数点型 %f の場合、精度によりデータの長さが切り捨てられる可能性があります。次のように。

func main() {
    a := 123
    fmt.Printf("%1.2d\n", a)    //123,宽度为1小于数值本身宽度,失效,而精度为2,无法截断整数
    b := 1.23
    fmt.Printf("%1.1f\n", b)    //1.2,精度为1,截断浮点型数据
    c := "asdf"
    fmt.Printf("%*.*s\n", 1, 2, c) //as,利用&#39;*&#39;支持宽度和精度的输入,并且字符串也可以利用精度截断
}
ログイン後にコピー

10. その他のフラグ:

+     总打印数值的正负号;对于%q(%+q)保证只输出ASCII编码的字符。 
-     左对齐 
#     备用格式:为八进制添加前导 0(%#o),为十六进制添加前导 0x(%#x)或0X(%#X),为 %p(%#p)去掉前导 0x;对于 %q,若 strconv.CanBackquote 返回 true,就会打印原始(即反引号围绕的)字符串;如果是可打印字符,%U(%#U)会写出该字符的Unicode编码形式(如字符 x 会被打印成 U+0078 &#39;x&#39;)。 
&#39; &#39;  (空格)为数值中省略的正负号留出空白(% d);以十六进制(% x, % X)打印字符串或切片时,在字节之间用空格隔开 
0     填充前导的0而非空格;对于数字,这会将填充移到正负号之后
ログイン後にコピー

Printf クラスのすべての関数には、Print 関数があります。この関数は書式設定を受け入れません。各オペランドと同等です。両方が適用されます。 %v.もう 1 つの可変パラメータ関数である Println は、オペランドの間に空白を挿入し、最後に改行文字

を追加します。プレースホルダが考慮されない場合、オペランドがインターフェイス値の場合、その内部固有の値が使用されます。 . インターフェイス自体ではなく。以下に示すように:

package main
 
import (
	"fmt"
)
 
type Sample struct {
	a   int
	str string
}
 
func main() {
	var i interface{} = Sample{1, "a"}
	fmt.Printf("%v\n", i)      //{1 a}
}
ログイン後にコピー

11. パラメータ プレースホルダの表示:

Go は、以下に示すように、出力形式で出力の順序を指定することによってパラメータ プレースホルダの表示をサポートします:

func main() {
    fmt.Printf("%[2]d, %[1]d\n", 11, 22)  //22, 11,先输出第二个值,再输出第一个值
}
ログイン後にコピー

12. 書式設定エラー:

無効な引数がプレースホルダーに指定された場合 (%d に文字列を指定した場合など)、書式設定エラーが発生します。すべてのエラーは「%!」で始まり、場合によってはその後に 1 文字 (プレースホルダー) が続き、括弧で囲まれた説明で終わります。

func main() {
	var i int = 1
	fmt.Printf("%s\n", i)  //%!s(int=1)
}
ログイン後にコピー

出力例

package main
import "fmt"
import "os"
type point struct {
    x, y int
}
func main() {
    //Go 为常规 Go 值的格式化设计提供了多种打印方式。例如,这里打印了 point 结构体的一个实例。
    p := point{1, 2}
    fmt.Printf("%v\n", p) // {1 2}
    //如果值是一个结构体,%+v 的格式化输出内容将包括结构体的字段名。
    fmt.Printf("%+v\n", p) // {x:1 y:2}
    //%#v 形式则输出这个值的 Go 语法表示。例如,值的运行源代码片段。
    fmt.Printf("%#v\n", p) // main.point{x:1, y:2}
    //需要打印值的类型,使用 %T。
    fmt.Printf("%T\n", p) // main.point
    //格式化布尔值是简单的。
    fmt.Printf("%t\n", true)
    //格式化整形数有多种方式,使用 %d进行标准的十进制格式化。
    fmt.Printf("%d\n", 123)
    //这个输出二进制表示形式。
    fmt.Printf("%b\n", 14)
    //这个输出给定整数的对应字符。
    fmt.Printf("%c\n", 33)
    //%x 提供十六进制编码。
    fmt.Printf("%x\n", 456)
    //对于浮点型同样有很多的格式化选项。使用 %f 进行最基本的十进制格式化。
    fmt.Printf("%f\n", 78.9)
    //%e 和 %E 将浮点型格式化为(稍微有一点不同的)科学技科学记数法表示形式。
    fmt.Printf("%e\n", 123400000.0)
    fmt.Printf("%E\n", 123400000.0)
    //使用 %s 进行基本的字符串输出。
    fmt.Printf("%s\n", "\"string\"")
    //像 Go 源代码中那样带有双引号的输出,使用 %q。
    fmt.Printf("%q\n", "\"string\"")
    //和上面的整形数一样,%x 输出使用 base-16 编码的字符串,每个字节使用 2 个字符表示。
    fmt.Printf("%x\n", "hex this")
    //要输出一个指针的值,使用 %p。
    fmt.Printf("%p\n", &p)
    //当输出数字的时候,你将经常想要控制输出结果的宽度和精度,可以使用在 % 后面使用数字来控制输出宽度。默认结果使用右对齐并且通过空格来填充空白部分。
    fmt.Printf("|%6d|%6d|\n", 12, 345)
    //你也可以指定浮点型的输出宽度,同时也可以通过 宽度.精度 的语法来指定输出的精度。
    fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
    //要最对齐,使用 - 标志。
    fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
    //你也许也想控制字符串输出时的宽度,特别是要确保他们在类表格输出时的对齐。这是基本的右对齐宽度表示。
    fmt.Printf("|%6s|%6s|\n", "foo", "b")
    //要左对齐,和数字一样,使用 - 标志。
    fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
    //到目前为止,我们已经看过 Printf了,它通过 os.Stdout输出格式化的字符串。Sprintf 则格式化并返回一个字符串而不带任何输出。
    s := fmt.Sprintf("a %s", "string")
    fmt.Println(s)
    //你可以使用 Fprintf 来格式化并输出到 io.Writers而不是 os.Stdout。
    fmt.Fprintf(os.Stderr, "an %s\n", "error")
}
ログイン後にコピー

[関連する推奨事項: Go ビデオ チュートリアルプログラミング教育]
# #

以上がGo言語の出力メソッドには何がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GOの浮動小数点番号操作に使用されるライブラリは何ですか? GOの浮動小数点番号操作に使用されるライブラリは何ですか? Apr 02, 2025 pm 02:06 PM

GO言語の浮動小数点数操作に使用されるライブラリは、精度を確保する方法を紹介します...

Go's Crawler Collyのキュースレッドの問題は何ですか? Go's Crawler Collyのキュースレッドの問題は何ですか? Apr 02, 2025 pm 02:09 PM

Go Crawler Collyのキュースレッドの問題は、Go言語でColly Crawler Libraryを使用する問題を調査します。 �...

GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? GO言語の「VAR」と「タイプ」キーワード定義構造の違いは何ですか? Apr 02, 2025 pm 12:57 PM

GO言語で構造を定義する2つの方法:VARとタイプのキーワードの違い。構造を定義するとき、GO言語はしばしば2つの異なる執筆方法を見ます:最初...

Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Goでは、Printlnとstring()関数を備えた文字列を印刷すると、なぜ異なる効果があるのですか? Apr 02, 2025 pm 02:03 PM

Go言語での文字列印刷の違い:printlnとstring()関数を使用する効果の違いはGOにあります...

GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? GOのどのライブラリが大企業によって開発されていますか、それとも有名なオープンソースプロジェクトによって提供されていますか? Apr 02, 2025 pm 04:12 PM

大企業または有名なオープンソースプロジェクトによって開発されたGOのどのライブラリが開発されていますか? GOでプログラミングするとき、開発者はしばしばいくつかの一般的なニーズに遭遇します...

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか? Apr 02, 2025 pm 05:09 PM

Golandのカスタム構造ラベルが表示されない場合はどうすればよいですか?ゴーランドを使用するためにGolandを使用する場合、多くの開発者はカスタム構造タグに遭遇します...

Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Redisストリームを使用してGO言語でメッセージキューを実装する場合、user_idタイプの変換の問題を解決する方法は? Apr 02, 2025 pm 04:54 PM

redisstreamを使用してGo言語でメッセージキューを実装する問題は、GO言語とRedisを使用することです...

Golang Generic Function Typeの制約がVSCodeで自動的に削除されるという問題を解決する方法は? Golang Generic Function Typeの制約がVSCodeで自動的に削除されるという問題を解決する方法は? Apr 02, 2025 pm 02:15 PM

VSCODEユーザーのGolang Generic Function Typeの制約の自動削除は、VSCODEを使用してGolangコードを書くときに奇妙な問題に遭遇する可能性があります。いつ...

See all articles