fmt.Println("a","b")
Tôi muốn in hai chuỗi không có khoảng trắng, cụ thể là "ab", nhưng ở trên sẽ in "a b".go - in không có khoảng cách giữa các mục
Tôi chỉ chuyển sang sử dụng Printf
?
fmt.Printf("%s%s\n","a","b")
fmt.Println("a","b")
Tôi muốn in hai chuỗi không có khoảng trắng, cụ thể là "ab", nhưng ở trên sẽ in "a b".go - in không có khoảng cách giữa các mục
Tôi chỉ chuyển sang sử dụng Printf
?
fmt.Printf("%s%s\n","a","b")
println dựa vào doPrint(args, true, true)
, nơi số đầu tiên là addspace
và thứ hai là addnewline
. Vì vậy, Prinln ith nhiều đối số sẽ luôn luôn in không gian.
Dường như không có cuộc gọi nào là doPrint(args, false, true)
đó là những gì bạn muốn. Printf
có thể là một giải pháp, Print
cũng nhưng bạn nên thêm dòng mới.
Vì nó có thể được tìm thấy trong doc:
định dạng println bằng cách sử dụng định dạng mặc định cho toán hạng của nó và ghi đến đầu ra tiêu chuẩn. Không gian luôn được thêm giữa các toán hạng và dòng mới được nối thêm. Nó trả về số byte được viết và bất kỳ lỗi viết nào gặp phải .
Vì vậy, bạn có cần phải làm những gì bạn đã nói hoặc bạn có thể nối các dây trước khi in:
fmt.Println("a"+"b")
Tùy thuộc vào usecase của bạn, bạn có thể sử dụng strings.Join(myStrings, "")
cho mục đích đó.
Tôi tự hỏi những gì các lý do là để làm 'Print' cư xử tinh tế khác với 'Println' như thế này. – Maxpm
Bạn sẽ phải chuẩn để so sánh hiệu suất, nhưng tôi thà sử dụng sau hơn một Printf
:
fmt.Println(strings.Join([]string{"a", "b"}, ""))
Hãy nhớ import "strings"
, và xem strings.Join
tài liệu cho một lời giải thích.
giải pháp trong dự án của tôi
package main
import "fmt"
var formatMap = map[int]string{
0: "",
1: "%v",
}
func Println(v ...interface{}) {
l := len(v)
if s, isOk := formatMap[l]; !isOk {
for i := 0; i < len(v); i++ {
s += "%v"
}
formatMap[l] = s
}
s := formatMap[l] + "\n"
fmt.Printf(s, v...)
}
func main() {
Println()
Println("a", "b")
Println("a", "b")
Println("a", "b", "c", 1)
}
'' 'fmt.Println ("ab")' '' –