গো-তে স্ট্রিংয়ে কীভাবে কোনও মান মান রূপান্তর করবেন?


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

গুলি 'ই', তবে আমি যা চাই তা হল "123"

দয়া করে আমাকে বলুন আমি কীভাবে "123" পেতে পারি।

এবং জাভাতে, আমি এইভাবে করতে পারি:

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

আমি কীভাবে concatদুটি স্ট্রিং যেতে পারি ?


দ্বিতীয় প্রশ্নের (স্ট্রিং কনটেনটেশন) এর অন্য কোনও উত্তর রয়েছে যা দক্ষতাটি কভার করে।
রেডগ্রিটিব্রিক

উত্তর:


772

strconvপ্যাকেজের Itoaফাংশনটি ব্যবহার করুন ।

উদাহরণ স্বরূপ:

package main

import (
    "strconv"
    "fmt"
)

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

স্ট্রিংগুলি কেবল +' আইএন ' দ্বারা বা প্যাকেজের Joinক্রিয়াকলাপটি ব্যবহার করে আপনি সূচনা করতে পারেন strings


97
ভাষা ডিজাইনাররা কেন ভাবেন যে "ইতোয়া" এর মতো ক্রিপ্টিক ফাংশনগুলির নামগুলি কিছুটা বর্ণনামূলক হতে পারে তার চেয়ে পছন্দনীয়?
লুক

25
@ ঠিক এটি সি heritageতিহ্য থেকে এসেছে যেখানে পুরো মেশিনটির 256K মেমরি থাকতে পারে; আরও কার্যকারিতা মাপসই করার জন্য ব্যবহারযোগ্যতা ত্যাগ করা হয়েছিল Go গো এর স্রষ্টা সকলেই সেই .তিহ্যে গভীরভাবে এম্বেড হয়েছেন এবং এই নামের সাথে সম্পূর্ণ স্বাচ্ছন্দ্য বোধ করেন।
ব্রায়ান

117
ইতিহাসের অ্যাক্সেসযোগ্যতা এবং শেখার সহজতার উপরে রাখা খারাপ ডিজাইন আইএমও IM :(
লুক

32
@ লুক আপনার নির্ভরশীল ব্যবহারকারীরা এবং কনভেনশন কতটা শক্তিশালী তা নির্ভর করে। কিছু ইউআই-তে এখনও সেভ আইকন হিসাবে একটি ফ্লপি ডিস্ক রয়েছে :)
নাথ্রন

65
জন্য সহজ স্মরন নাম ItoA - পূর্ণসংখ্যা হওয়া ASCII করার
ইভান Aracki

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

আপনি কি জানেন মান নির্দিষ্ট ধরনের উদাহরণস্বরূপ সংশ্লিষ্ট ফরম্যাটার ব্যবহার করেন তাহলে %dজন্যint

আরও তথ্য - এফএমটি


%dইন - এর জন্য
স্ক্যানিরো

4
আমি এটির সুপারিশ করব না, কারণ এটি অন্যান্য রূপান্তর পদ্ধতির তুলনায় অনেক কম দক্ষ কারণ এটি প্রতিবিম্ব ব্যবহার করে।
রিকার্ডো সুজা

49

এটা তোলে দয়া করে মনে রাখবেন আকর্ষণীয় strconv.Itoaহয় সাধারণভাবে সংক্ষেপে জন্য

func FormatInt(i int64, base int) string

বেস 10 সহ

উদাহরণ স্বরূপ:

strconv.Itoa(123)

সমতুল্য

strconv.FormatInt(int64(123), 10)

অপরিবর্তিত: স্ট্রকনভ ইন স্ট্রকনভ.আইটিয়া
ফেলো ভিলচেস

1
@ ফেলোভিচস "স্ট্রকনভ" আমদানি করে
কেজি থ্রেট্রেট

3
নোট আকর্ষণীয় FormatInt () সরাসরি পরিবর্তে Itoa () কলিং সংরক্ষণ যে 0.1 ন্যানোসেকেন্ড এ বেঞ্চমার্ক অনুযায়ী stackoverflow.com/a/38077508/968244
isapir

43

fmt.Sprintf, strconv.Itoaএবং কাজ strconv.FormatIntকরবে। তবে Sprintfপ্যাকেজটি ব্যবহার করবে reflectএবং এটি আরও একটি অবজেক্ট বরাদ্দ করবে, সুতরাং এটি দক্ষ পছন্দ নয়।

এখানে চিত্র বর্ণনা লিখুন



22

এক্ষেত্রে strconvএবং fmt.Sprintfএকই কাজ উভয়ই করুন তবে strconvপ্যাকেজের Itoaফাংশনটি ব্যবহার করা সবচেয়ে ভাল পছন্দ, কারণ fmt.Sprintfরূপান্তরকালে আরও একটি বিষয় বরাদ্দ করুন।

উভয়ের নেঙ্কমার্ক ফলাফল পরীক্ষা করুন মানদণ্ডটি এখানে দেখুন: https://gist.github.com/evalphobia/caee1602969a640a4530

উদাহরণস্বরূপ https://play.golang.org/p/hlaz_rMa0D দেখুন ।


1
আপনার অ্যাপ্লিকেশনটিতে দৃশ্যমান প্রভাব রয়েছে? সর্বদা হিসাবে - এটি নির্ভর করে। অন্য একটি অবজেক্টের অর্থ আরও একটি অবজেক্ট, স্পষ্টত অস্থায়ী ছোট মেমরির আঘাতের বাইরে, আবর্জনা সংগ্রহ করা দরকার। আপনি যদি উচ্চ হারে ফাংশনটি কল করছেন, উদাহরণস্বরূপ কিছু সিরিয়ালাইজেশন প্রক্রিয়ার অংশ হিসাবে যখনই কোথাও থেকে কোনও বার্তা পাওয়া যায়, এটির একটি উল্লেখযোগ্য প্রভাব পড়তে পারে। যেহেতু ব্যবহারের সহজলভ্যতার দিক থেকে fmt.Sprintfএবং strconv.iotaএকই উপায়ে এবং উপরের তথ্যগুলি কম জিসি প্রভাবের সাথে আইওটা দ্রুত হতে দেখায় তাই দেখা যায় যে iotaকোনও একক পূর্ণসংখ্যার রূপান্তরকরণের প্রয়োজন হলে এটি সাধারণত ব্যবহার করা উচিত।
এডওয়ার্ড

খুব তাড়াতাড়ি এই স্তরে চিন্তা করা আমার কাছে অকালীন অপ্টিমাইজেশনের মতো মনে হচ্ছে। প্রথমে পাঠযোগ্য কোড লিখাই ভাল।
বুন

@ বুন তারা সমান পঠনযোগ্য। পাশাপাশি দ্রুত ব্যবহার করতে পারে। এছাড়াও, কী বলবেন যে নতুন গোলং প্রোগ্রামার এমন কিছু দিয়ে শুরু হচ্ছে না যা প্রচুর রূপান্তর করে? আমি এখনই আমার প্রথম গোলং কোডটি লিখছি একজন অভিজ্ঞ প্রোগ্রামার এবং সেই পরিস্থিতিতে আছি।
সুডো


3

ঠিক আছে, তাদের বেশিরভাগ আপনাকে ভাল কিছু দেখিয়েছে। আসুন আপনি এটি দিন:

// 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)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.