簡體   English   中英

java中的消息格式以及如何在Golang中復制它

[英]Message format in java and how to replicate the same in Golang

這是Java代碼:

AtomicInteger obIndex = new AtomicInteger(0);
MessageFormat.format("{0,number,#},{1},{2},{3},\"{4}\"",
    obIndex.getAndIncrement(),
    "5bb2b35c67525f9e845648df370652b8",
    "Vm:vm-289",
    "1.1.1.1:113",
    "ABC-Testvm-1");

輸出:

0,5bb2b35c67525f9e845648df370652b8,Vm:vm-289,1.1.1.1:113,"ABC-Testvm-1"

我在Go中試過這個:

value := fmt.Sprintf("%d,%s,%s,%s,%s",
    0,
    "5bb2b35c67525f9e845648df370652b8",
    "Vm:vm-289",
    "1.1.1.1:113", "ABC-Testvm-1")
fmt.Println(value)

哪個輸出:

0,5bb2b35c67525f9e845648df370652b8,Vm:vm-289,1.1.1.1:113,ABC-Testvm-1

{0,number,#}什么意義?如何在Go中獲得相同的內容?

這在java.text.MessageFormat有詳細說明。 傳遞給MessageFormat.format()的字符串是一種模式 模式由格式元素組成 格式元素的形式是:

 FormatElement:
         { ArgumentIndex }
         { ArgumentIndex , FormatType }
         { ArgumentIndex , FormatType , FormatStyle }

所以在第一個格式元素中:

{0,number,#}

0是要格式化的值的參數索引。

number是格式類型, #是格式樣式,更具體地說是子格式 這意味着參數將使用以下子格式進行格式化:

new DecimalFormat(subformatPattern, DecimalFormatSymbols.getInstance(getLocale()))

#子格式在描述java.text.DecimalFormat 它只是意味着不使用小數位,只顯示為整數,如果它不是整數,它將被舍入(使用RoundingMode.HALF_EVEN模式)。

在Go中格式化整數,您可以像使用%d動詞一樣使用,這將為整數生成相同的輸出格式。 如果該數字是浮點數,則不起作用( %d只能用於整數)。 如果數字是浮點數,請使用%f動詞,更具體地說%.0f告訴它舍入為整數,或者使用最短格式%.f

此外,您的Java版本將最后一個參數放在雙引號中,因此您應該在Go中執行相同的操作。

value := fmt.Sprintf("%d,%s,%s,%s,\"%s\"",
    0,
    "5bb2b35c67525f9e845648df370652b8",
    "Vm:vm-289",
    "1.1.1.1:113", "ABC-Testvm-1")

fmt.Println(value)

這將輸出(在Go Playground上嘗試):

0,5bb2b35c67525f9e845648df370652b8,Vm:vm-289,1.1.1.1:113,"ABC-Testvm-1"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM