গো-তে টাইপল ডেটা টাইপ করুন


118

করছেন যদিও যান ঘুরে দেখুন চূড়ান্ত ব্যায়াম , আমি সিদ্ধান্ত নিয়েছি আমি (একটি কিউ প্রয়োজন string, int) জোড়া। এটি যথেষ্ট সহজ:

type job struct {
    url string
    depth int
}

queue := make(chan job)
queue <- job{url, depth}

তবে এটি আমাকে ভাবতে পেরেছিল: গো-তে কোনও অন্তর্নির্মিত জুটি / টুপল ডেটা টাইপ আছে? একটি ফাংশন থেকে একাধিক মান প্রত্যাবর্তনের জন্য সমর্থন রয়েছে , তবে এএএএএফসিটি, উত্পাদিত একাধিক মান টিপলগুলি গো টাইপের সিস্টেমে প্রথম শ্রেণির নাগরিক নয়। এটাই কি?

"আপনি কী চেষ্টা করেছেন" অংশ হিসাবে, সুস্পষ্ট বাক্য গঠন (পাইথন প্রোগ্রামারের পিওভি থেকে)

queue := make(chan (string, int))

কাজ হয়নি।

উত্তর:


57

গোতে কোনও দ্বিধাগ্রন্থ নেই, এবং আপনি সঠিক, ফাংশন দ্বারা ফিরিয়ে দেওয়া একাধিক মান কোনও প্রথম-শ্রেণীর অবজেক্টকে উপস্থাপন করে না।

নিকের উত্তরটি দেখায় যে আপনি কীভাবে সাদৃশ্যমূলক ধরণের ব্যবহারগুলি পরিচালনা করতে পারেন তেমন কিছু করতে পারেন interface{}। (আমি এটিকে টিউপলের মতো সূচকযোগ্য করে তুলতে কাঠামোর পরিবর্তে কোনও অ্যারের ব্যবহার করতে পারি, তবে মূল ধারণাটি হ'ল interface{})

আমার অন্য উত্তরটি দেখায় আপনি কীভাবে অনুরূপ কিছু করতে পারেন যা বেনামে স্ট্রাইক ব্যবহার করে কোনও প্রকার তৈরি করা এড়ানো যায়।

এই কৌশলগুলির tuples এর কিছু বৈশিষ্ট্য রয়েছে, তবে না, তারা টিপলস নয়।


91

তুমি এটি করতে পারো. এটি একটি টিপলের চেয়ে আরও শব্দযুক্ত দেখায় তবে এটি একটি বড় উন্নতি কারণ আপনি টাইপ চেকিং পান।

সম্পাদনা করুন: নিকের পরামর্শ অনুসারে সম্পূর্ণ কাজের উদাহরণ সহ স্নিপেট প্রতিস্থাপন। খেলার মাঠের লিঙ্ক: http://play.golang.org/p/RNx_otTFpk

package main

import "fmt"

func main() {
    queue := make(chan struct {string; int})
    go sendPair(queue)
    pair := <-queue
    fmt.Println(pair.string, pair.int)
}

func sendPair(queue chan struct {string; int}) {
    queue <- struct {string; int}{"http:...", 3}
}

বেনামে স্ট্রাক্ট এবং ক্ষেত্রগুলি এর মতো দ্রুত এবং নোংরা সমাধানের জন্য সূক্ষ্ম। যদিও সহজ ক্ষেত্রে সমস্ত ক্ষেত্রে, আপনি যেমনটি করেছেন ঠিক তেমন একটি নামক স্ট্রাক্ট সংজ্ঞায়িত করতে আরও ভাল করতে চান।


9
বেনাম স্ট্রাক্ট সদস্যদের থেকে কীভাবে মূল্যবোধগুলি পাওয়া যায় তা আপনার সম্ভবত বর্ণনা করা উচিত কারণ আমি মনে করি না এটি কোনও শিক্ষানবিশকে সুস্পষ্ট বলে মনে হয়!
নিক ক্রেগ-উড

9
তবে, একই ধরণের একাধিক ক্ষেত্র থাকলে
newacct

1
আপনি একটি বেনামি কাঠামোতে ক্ষেত্রগুলির নাম রাখতে পারেন, আপনাকে কেবল নিশ্চিত করতে হবে যে প্রত্যেক জায়গায় বেনাম কাঠামো সংজ্ঞা প্রদর্শিত হবে একই জায়গায় ক্ষেত্রগুলির নামকরণ করা হয়েছে (এই উদাহরণে তিনবার।) বেনামি ক্ষেত্রগুলি যদি আপনি এর সাথে দূরে যেতে পারেন তবে আরও সহজ হয় ।
সোনিয়া 21

5
তাহলে উত্তরটি "না, কোনও ধরণের টাইপ নেই"?
ফ্রেড ফু

37

আপনি চাইলে আপনি এরকম কিছু করতে পারেন

package main

import "fmt"

type Pair struct {
    a, b interface{}
}

func main() {
    p1 := Pair{"finished", 42}
    p2 := Pair{6.1, "hello"}
    fmt.Println("p1=", p1, "p2=", p2)
    fmt.Println("p1.b", p1.b)
    // But to use the values you'll need a type assertion
    s := p1.a.(string) + " now"
    fmt.Println("p1.a", s)
}

তবে আমি মনে করি আপনার ইতিমধ্যে যা আছে তা নিখুঁতভাবে মূর্তিযুক্ত এবং স্ট্রাক্ট আপনার ডেটাটিকে পুরোপুরি বর্ণনা করে যা প্লেইন টিপলস ব্যবহার করে একটি বড় সুবিধা।

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