ইন্টারফেস {} কে স্ট্রিংয়ে রূপান্তর করবেন?


114

কমান্ড-লাইন যুক্তি পার্স করার জন্য আমি ডকপট ব্যবহার করছি । এটি কাজ করে এবং এর ফলে মানচিত্রের ফলাফল হয়

map[<host>:www.google.de <port>:80 --help:false --version:false]

এখন আমি দুটি মানের মধ্যে একটি কোলন সহ একটি স্ট্রিংয়ের সাথে মান hostএবং portমানটি একত্রিত করতে চাই । মূলত: এরকম কিছু:

host := arguments["<host>"] + ":" + arguments["<port>"]

দুর্ভাগ্যক্রমে, এটি কার্যকর হয় না, কারণ আমি ত্রুটি বার্তা পেয়েছি:

অবৈধ অপারেশন: আর্গুমেন্ট [""] + ":" (মেলানো নয় এমন প্রকারের ইন্টারফেস {} এবং স্ট্রিং)

সুতরাং স্পষ্টতই আমার মানচিত্রটি যে মানটি (যা সঠিক interface{}, তাই এটি কিছু হতে পারে) থেকে একটি স্ট্রিংয়ে রূপান্তর করতে হবে। এখন আমার প্রশ্ন, আমি কীভাবে এটি করব?


উত্তর:


153

আপনাকে টাইপ-এ্যাসেরেন্স যুক্ত করতে হবে .(string) । এটি প্রয়োজনীয় কারণ মানচিত্রটি ধরণের map[string]interface{}:

host := arguments["<host>"].(string) + ":" + arguments["<port>"].(string)

Docopt এর সর্বশেষ সংস্করণ ফেরৎ অনির্বাচন বস্তুর আছে রূপান্তরের জন্য পদ্ধতি:

host, err := arguments.String("<host>")
port, err := arguments.String("<port>")
host_port := host + ":" + port

7
- যোগ করার জন্য যে এই প্রকার বিবৃতির বলা হয় চান golang.org/ref/spec#Type_assertions । আমি একবারে এই সঠিক পরিভাষাটি বের করতে সমস্যা হয়েছিল trouble
শ্রীজিথ রামকৃষ্ণন

["
<<<<

89

আপনার কোনও প্রকারের দৃ use়তা ব্যবহার করার দরকার নেই, পরিবর্তে কেবলমাত্র %vএটির সাথে ফর্ম্যাট সুনির্দিষ্ট ব্যবহার করুন Sprintf:

hostAndPort := fmt.Sprintf("%v:%v", arguments["<host>"], arguments["<port>"])

স্ট্রিং হিসাবে castালাই ইন্টারফেসের টাইপ করার চেষ্টা করার সময় এটিই আমার পক্ষে কাজ করতে পেরেছিল।
ফিলবুট 3

1
আমার জন্য, এটি কাজ করে না। এতে স্ট্রিংয়ের পরিবর্তে বাইট ASCII চার্ট মুদ্রণ শেষ হয়েছিল, যেমন 201 হয়ে যায় [[50,48,49] ", সুতরাং আমি এর পরিবর্তে fmt.Sprintf ("% s ", থিহিং) ব্যবহার করে শেষ করেছি ...
ফিলিপ

18

পিটার যা বলেছিলেন তার প্রসারিত করার জন্য: যেহেতু আপনি ইন্টারফেস {string থেকে স্ট্রিংয়ে যেতে চাইছেন, তাই টাইপ করা চাপ মাথা ব্যথার দিকে পরিচালিত করবে যেহেতু আপনাকে একাধিক আগত ধরণের অ্যাকাউন্টের প্রয়োজন need আপনাকে প্রতিটি প্রকারের সম্ভাব্যতা উল্লেখ করতে হবে এবং এটি ব্যবহারের আগে যাচাই করা উচিত।

Fmt.Sprintf ( https://golang.org/pkg/fmt/#Sprintf ) ব্যবহার করে ইন্টারফেস রূপান্তরটি স্বয়ংক্রিয়ভাবে পরিচালনা করে। যেহেতু আপনি জানেন যে আপনার পছন্দসই আউটপুট টাইপটি সর্বদা একটি স্ট্রিং, তাই স্প্রিন্টফ ইন্টারফেসের পিছনে যে কোনও প্রকারের হ্যান্ডেল করবে আপনার পক্ষে অতিরিক্ত কোডের গুচ্ছ ছাড়াই।

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