गो में एक इंट वैल्यू को स्ट्रिंग में कैसे बदलें?


486
i := 123
s := string(i) 

s 'E' है, लेकिन मैं जो चाहता हूं वह "123" है

कृपया मुझे बताएं कि मुझे "123" कैसे मिल सकता है।

और जावा में, मैं इस तरह से कर सकता हूं:

String s = "ab" + "c"  // s is "abc"

मैं concatगो में दो तार कैसे कर सकता हूं ?


दूसरे प्रश्न (स्ट्रिंग समाकलन) में एक उत्तर कहीं और है जो दक्षता को कवर करता है।
RedGrittyBrick

जवाबों:


772

strconvपैकेज के Itoaफ़ंक्शन का उपयोग करें ।

उदाहरण के लिए:

package main

import (
    "strconv"
    "fmt"
)

func main() {
    t := strconv.Itoa(123)
    fmt.Println(t)
}

आप स्ट्रेट को केवल +'आईएनजी द्वारा या पैकेज के Joinफंक्शन का उपयोग करके कर सकते हैं strings


97
भाषा डिजाइनरों ने क्यों सोचा था कि "इटोआ" जैसे क्रिप्टिक कार्यों के नाम कुछ और बेहतर थे जो कि थोड़ा अधिक वर्णनात्मक हो सकते हैं?
ल्यूक

25
@ यह सी विरासत से आता है जहां पूरी मशीन में 256K मेमोरी हो सकती है; प्रयोज्य में अधिक कार्यक्षमता फिट करने के लिए बलिदान किया गया था। गो के निर्माता सभी उस विरासत में गहराई से अंतर्निहित हैं और इन नामों के साथ पूरी तरह से सहज महसूस करते हैं।
ब्रायन

117
पहुँच को इतिहास से ऊपर रखना और सीखने में आसानी करना खराब डिज़ाइन IMO है। :(
ल्यूक

32
@ ल्यूक निर्भर करता है कि आपके लक्षित उपयोगकर्ता कौन हैं और सम्मेलन कितना मजबूत है। कुछ UI में अभी भी सेव आइकन के रूप में एक फ्लॉपी डिस्क है :)
नाथ्रॉन

65
आसान याद रखने वाले नाम के लिए इटोआ - इंटेगर टू एएससीआईआई
इवान एरेकी

139
fmt.Sprintf("%v",value);

यदि आप जानते हैं कि विशिष्ट प्रकार का मान उदाहरण के %dलिए संबंधित फ़ॉर्मेटर का उपयोग करता हैint

अधिक जानकारी - fmt



4
मैं इसकी सिफारिश नहीं करूंगा, क्योंकि यह अन्य रूपांतरण विधियों की तुलना में बहुत कम कुशल है क्योंकि यह प्रतिबिंब का उपयोग करता है।
रिकार्डो सूजा

49

यह ध्यान रखना दिलचस्प है कि इसके strconv.Itoaलिए आशुलिपि है

func FormatInt(i int64, base int) string

बेस 10 के साथ

उदाहरण के लिए:

strconv.Itoa(123)

के बराबर है

strconv.FormatInt(int64(123), 10)

अपरिभाषित: strconv में strconv.Itoa
फेलो

1
@FeloVilches "strconv" आयात
kgthegreat

3
टिप्पणी के लिए दिलचस्प FormatInt () के बजाय सीधे itoa () कॉल की बचत होती है कि 0.1 nanosecond में बेंचमार्क के अनुसार stackoverflow.com/a/38077508/968244
isapir

43

fmt.Sprintf, strconv.Itoaऔर strconv.FormatIntकाम करेंगे। लेकिन Sprintfपैकेज का उपयोग करेगा reflect, और यह एक और वस्तु को आवंटित करेगा, इसलिए यह एक कुशल विकल्प नहीं है।

यहाँ छवि विवरण दर्ज करें



22

इस मामले में दोनों strconvऔर fmt.Sprintfएक ही काम करते हैं लेकिन strconvपैकेज के Itoaफ़ंक्शन का उपयोग करना सबसे अच्छा विकल्प है, क्योंकि fmt.Sprintfरूपांतरण के दौरान एक और वस्तु आवंटित करें।

दोनों के nenchmark परिणाम की जाँच करें यहाँ बेंचमार्क की जाँच करें: https://gist.github.com/evalphobia/caee1602969a640a4530

उदाहरण के लिए https://play.golang.org/p/hlaz_rMa0D देखें ।


1
@ बून आपके ऐप पर दिखाई दे रहा है? हमेशा की तरह - यह निर्भर करता है। एक और वस्तु का मतलब एक और वस्तु है, जो स्पष्ट अस्थायी छोटी मेमोरी हिट से परे है, कचरा एकत्र करने की आवश्यकता है। यदि आप फ़ंक्शन को उच्च दरों पर बुला रहे हैं, उदाहरण के लिए जब भी कहीं से कोई संदेश प्राप्त होता है, तो कुछ क्रमांकन प्रक्रिया के हिस्से के रूप में, यह एक महत्वपूर्ण प्रभाव डाल सकता है। के बाद से fmt.Sprintfऔर strconv.iotaऔर ऊपर डेटा से पता चलता है जरा भी तेजी से कम जीसी प्रभाव के साथ होने के लिए उपयोग में आसानी के मामले में समान हैं, ऐसा लगता है कि iotaजब एक पूर्णांक परिवर्तित करने की जरूरत है सामान्य रूप में इस्तेमाल किया जाना चाहिए।
एडवर्ड

मुझे लगता है कि इस स्तर पर समय से पहले अनुकूलन की तरह लगता है इतनी जल्दी। सबसे पहले पठनीय कोड लिखना है।
बून

@ बून वे समान रूप से पठनीय हैं। के रूप में अच्छी तरह से तेजी से एक का उपयोग कर सकते हैं। इसके अलावा, क्या कहना है एक नया गोलंग प्रोग्रामर कुछ ऐसा नहीं है जो इन रूपांतरणों के बहुत से शुरू करता है? मैं एक अनुभवी प्रोग्रामर हूं, जो अपना पहला गोलांग कोड अभी और उस स्थिति में लिख रहा हूं।
sudo


3

ठीक है, उनमें से अधिकांश ने आपको कुछ अच्छा दिखाया है। Let'me तुम्हें यह दे:

// ToString Change arg to string
func ToString(arg interface{}, timeFormat ...string) string {
    if len(timeFormat) > 1 {
        log.SetFlags(log.Llongfile | log.LstdFlags)
        log.Println(errors.New(fmt.Sprintf("timeFormat's length should be one")))
    }
    var tmp = reflect.Indirect(reflect.ValueOf(arg)).Interface()
    switch v := tmp.(type) {
    case int:
        return strconv.Itoa(v)
    case int8:
        return strconv.FormatInt(int64(v), 10)
    case int16:
        return strconv.FormatInt(int64(v), 10)
    case int32:
        return strconv.FormatInt(int64(v), 10)
    case int64:
        return strconv.FormatInt(v, 10)
    case string:
        return v
    case float32:
        return strconv.FormatFloat(float64(v), 'f', -1, 32)
    case float64:
        return strconv.FormatFloat(v, 'f', -1, 64)
    case time.Time:
        if len(timeFormat) == 1 {
            return v.Format(timeFormat[0])
        }
        return v.Format("2006-01-02 15:04:05")
    case jsoncrack.Time:
        if len(timeFormat) == 1 {
            return v.Time().Format(timeFormat[0])
        }
        return v.Time().Format("2006-01-02 15:04:05")
    case fmt.Stringer:
        return v.String()
    case reflect.Value:
        return ToString(v.Interface(), timeFormat...)
    default:
        return ""
    }
}

0
package main

import (
    "fmt" 
    "strconv"
)

func main(){
//First question: how to get int string?

    intValue := 123
    // keeping it in separate variable : 
    strValue := strconv.Itoa(intValue) 
    fmt.Println(strValue)

//Second question: how to concat two strings?

    firstStr := "ab"
    secondStr := "c"
    s := firstStr + secondStr
    fmt.Println(s)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.