2014-09-19 26 views

Trả lời

10

Plain in cũ sẽ làm việc nếu bạn thực hiện các yếu tố cuối cùng "\ n".
Cũng sẽ dễ đọc hơn nếu bạn không quen với định dạng kiểu in.

Xem ở đây on play

fmt.Println("a","b") 
fmt.Print("a","b","\n") 
fmt.Printf("%s%s\n","a","b") 

sẽ in:

a b 
ab 
ab 
+3

Đừng quên 'fmt.Println (" a "+" b ")' – AndrewN

1

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.

2

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 đó.

+0

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

0

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.

0

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) 
} 
Các vấn đề liên quan