Go তে টুস্ট্রিং () ফাংশন


96

strings.Joinফাংশনটি কেবল স্ট্রিংয়ের টুকরা নেয়:

s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))

তবে এটি কোনও ToString()ফাংশন বাস্তবায়ন করে এমন স্বেচ্ছাসেবী বস্তুগুলিকে পাস করতে সক্ষম হতে পেরে ভাল লাগবে ।

type ToStringConverter interface {
    ToString() string
}

গো-এ কি এমন কিছু আছে বা আমার কি intটসস্ট্রিং পদ্ধতিগুলির মতো বিদ্যমান ধরণের সাজসজ্জা করতে হবে এবং চারপাশে একটি মোড়ক লিখতে হবে strings.Join?

func Join(a []ToStringConverter, sep string) string

7
নোট করুন যে এরকম একটি ইন্টারফেস ইতিমধ্যে বিদ্যমান: golang.org/pkg/fmt/#Stringer
Denys


@ ডিমন আমি এই সদৃশটির প্রয়োজন দেখছি না। বর্তমান প্রশ্নটি আমার মতে যথেষ্ট স্পষ্ট ছিল এবং সত্য (বা সম্পূর্ণ) উত্তর ছিল না এর অর্থ এই নয় যে আপনাকে আবার জিজ্ঞাসা করতে হবে।
অস্বীকার করেন সাগুরেট

উত্তর:


183

String() stringযে কোনও নামী প্রকারের সাথে একটি পদ্ধতি সংযুক্ত করুন এবং কোনও কাস্টম "টোস্ট্রিং" কার্যকারিতা উপভোগ করুন:

package main

import "fmt"

type bin int

func (b bin) String() string {
        return fmt.Sprintf("%b", b)
}

func main() {
        fmt.Println(bin(42))
}

খেলার মাঠ: http://play.golang.org/p/Azql7_pDAA


আউটপুট

101010

4
আপনি ঠিক বলেছেন, যদিও উত্তরটি বোঝায় না যে রূপান্তরটিই একমাত্র বিকল্প। বিন্দুটি কোনও ধরণের সাথে সংযুক্ত স্ট্রিং () পদ্ধতিতে। এফএমটি।
zzzz

4
bin(42).String()অন্য উদাহরণ হিসাবে যুক্ত করা উত্তরের জন্য ভাল হবে।
থেলিমিস্ট

দ্রষ্টব্য: ফানটনের Error() stringচেয়ে বেশি অগ্রাধিকার রয়েছেString() string
জেলান ইয়াং

4
অন্য কথায়, Stringerইন্টারফেসটি প্রয়োগ করুন : golang.org/pkg/fmt/#Stringer
টোথামারিও

18

যখন আপনার নিজস্ব থাকে struct, আপনার নিজস্ব রূপান্তর-থেকে-স্ট্রিং ফাংশন থাকতে পারে।

package main

import (
    "fmt"
)

type Color struct {
    Red   int `json:"red"`
    Green int `json:"green"`
    Blue  int `json:"blue"`
}

func (c Color) String() string {
    return fmt.Sprintf("[%d, %d, %d]", c.Red, c.Green, c.Blue)
}

func main() {
    c := Color{Red: 123, Green: 11, Blue: 34}
    fmt.Println(c) //[123, 11, 34]
}

4

স্ট্রাক্ট সহ আরও একটি উদাহরণ:

package types

import "fmt"

type MyType struct {
    Id   int    
    Name string
}

func (t MyType) String() string {
    return fmt.Sprintf(
    "[%d : %s]",
    t.Id, 
    t.Name)
}

এটি ব্যবহার করার সময় সতর্কতা অবলম্বন করুন,
'+' দিয়ে কন্টেন্টেশন সংকলন করে না:

t := types.MyType{ 12, "Blabla" }

fmt.Println(t) // OK
fmt.Printf("t : %s \n", t) // OK
//fmt.Println("t : " + t) // Compiler error !!!
fmt.Println("t : " + t.String()) // OK if calling the function explicitly

-7

আমি নীচের মতো কিছু পছন্দ করি:

type StringRef []byte

func (s StringRef) String() string {
        return string(s[:])
}

…

// rather silly example, but ...
fmt.Printf("foo=%s\n",StringRef("bar"))

4
আপনার অকেজো লাগবে না :(যেমন ন্যায়সঙ্গত string(s))। এছাড়াও, যদি bহয় []byteতাহলে string(b)অনেক সহজ এবং তারপর আপনার StringRef(b).String()। অবশেষে, আপনার উদাহরণ হিসাবে অর্থহীন হয় %s(অসদৃশ %v) ইতিমধ্যে ছাপে []byteসম্ভাব্য কপি যে ছাড়া ছাড়া স্ট্রিং হিসাবে আর্গুমেন্ট string(b)সাধারণত আছে।
ডেভ সি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.