在Go语言中,Println、Printf和Print有什么区别?

34

我来自一个JS世界,通常使用像console.logconsole.error这样的东西。

现在,我正在跟随教程,那里的讲师做了这样的事情:

package main

import "fmt"



func main() {

    var FirstName = "Varun"
    var lastName = "bindal"

    fmt.Println(FirstName, lastName)
    fmt.Printf("%T", FirstName)
}

这里他使用PrintF来检查类型而不是Println。最初,我认为println会在新行中打印,因此我进行了更改。

fmt.Printf("%T", FirstName)

为了

fmt.Println("%T", FirstName)

但是这里记录的是%T Varun,而不是告诉我类型。

我去他们的网站上查找,要么无法理解,要么找不到答案。

谷歌搜索后我了解到在Go中有三种记录/打印方式:

  1. Println
  2. Printf
  3. Print

那么,有人能告诉我它们之间的区别吗?


2
fmt 包有很好的文档说明。 - Adrian
14
当问题陈述称他们已经阅读了文档但无法理解时,声称文档很好并下投票将不会有帮助。应该给予赞同,因为似乎OP已经尝试了研究但失败了。请注意不要改变原来的意思。 - TafT
4个回答

45
  • Printf - "打印格式化函数",此函数可让您将数字、变量和字符串格式化为您提供的第一个字符串参数
  • Print - "打印",它无法格式化任何内容,只需拿到一个字符串并打印出来
  • Println - "打印一行",与Print()相同,但是它会在末尾添加一个换行符\n

4
Println 在参数之间插入空格。当其中一个参数不是字符串时,Print 只会在参数之间插入空格。 - Joel Cornett
2
你的意思是 PrintlnPrint() 是一样的吗?只有 Printf() 可以进行格式化替换,其他函数只是将给定的参数依次打印出来(插入或不插入空格和换行符)。 - Ward D.S.
Printf() 和 Println() 都可以进行替代格式化,但是 Println() 会在参数末尾添加一个换行符,而 Printf() 则不会。 - Nate Schreiner
PrintlnPrint相似,而不是Printf。答案被错误地编辑了(可能只是一个打字错误,但很重要...)。原始答案是好的。@NateSchreiner我认为不是这样的。在这三个中,只有Printf可以进行格式化,PrintlnPrint都不能。 - starriet
@starriet编辑了答案以修复打字错误! - Yeonho
同时,Println 会自动将动词“v”添加到格式中。您可以在 fmt 源代码中看到这一点。 - Ireina

23
正如Nate所说:fmt.Printfmt.Println 打印原始字符串(fmt.Println 会添加一个换行符)。 fmt.Printf 不会打印新的一行,你需要在结尾加上 \nfmt.Printf 的工作方式很简单,你提供一个包含特定符号的字符串,其他参数将替换这些符号。例如:
fmt.Printf("%s is cool", "Bob") 

在这种情况下,%s代表一个字符串。在你的情况下,%T打印一个变量的类型。

0
回答你的问题, fmt.Print 使用 \n 和空格就像 fmt.Printlnfmt.Printf 使用 \n%v 就像 fmt.Println
如下所示的例子:
package main

import "fmt"

func main() {
    const name, age = "Kim", 22
    //
    fmt.Print(name, " is ", age, " years old.\n")  // Kim is 22 years old.
    fmt.Printf("%v is %v years old.\n", name, age) // Kim is 22 years old.
    fmt.Println(name, "is", age, "years old.")     // Kim is 22 years old.
    //
    print(name, " is ", age, " years old.\n") // Kim is 22 years old.
    println(name, "is", age, "years old.")    // Kim is 22 years old.
}

printprintln类似于带有资格的fmt.Printfmt.Println。请参见https://stackoverflow.com/a/48420811/12817546https://dev59.com/KGUq5IYBdhLWcg3wN94t#14680544

Go提供了许多其他格式化I/O的方法。请参见https://golang.org/pkg/fmt


-2

fmt.Println("圆周率的值为:", math.Pi)

fmt.Printf("圆周率的值为:%g", math.Pi)

期望输出 //

圆周率的值为:3.141592653589793

圆周率的值为:3.141592653589793


2
你能添加描述吗? - RtmY
2
在我看来,这个例子解释了很多。 - skad00sh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接