আমি কীভাবে একটি ভেরিয়েডিক ইনপুট হিসাবে একটি স্লাইস পাস করতে পারি?


89

আমি একটি ফাংশন আছে func more(... t)। আমি ভাবছি করছি যদি এটা আর্গুমেন্ট এর একটি তালিকায় নিয়ে আসতে 'একটি ফালি ব্যবহার করা সম্ভব ...

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

    import "os/exec"
    import "strings"
    func main(){
        plainCommand  := "echo hello world"
        sliceA := strings.Fields(plainCommand)
        cmd := exec.Command(sliceA)
    }

উত্তর:


103

গো প্রোগ্রামিং ভাষার স্পেসিফিকেশন

... পরামিতিগুলিতে যুক্তিগুলি পাস করা

যদি চূড়ান্ত প্যারামিটার ধরণের ... টি এর সাথে চ পৃথক হয়, তবে ফাংশনের মধ্যে আর্গুমেন্ট প্রকারের [] টি এর পরামিতির সমতুল্য। চ এর প্রতিটি কলে, আর্গুমেন্টটি চূড়ান্ত প্যারামিটারে প্রেরণ করা হয় টাইপের একটি নতুন স্লাইস [] টি যার ধারাবাহিক উপাদানগুলি আসল আর্গুমেন্ট, যা সকলকে অবশ্যই টি টাইপের জন্য নির্ধারিত হতে হবে the স্লাইসের দৈর্ঘ্য অতএব সংখ্যা চূড়ান্ত প্যারামিটারে আবদ্ধ যুক্তি এবং প্রতিটি কল সাইটের জন্য পৃথক হতে পারে।


প্যাকেজ এক্সিকিউট

ফানক কমান্ড

func Command(name string, arg ...string) *Cmd

কমান্ড প্রদত্ত যুক্তি দিয়ে নামযুক্ত প্রোগ্রামটি সম্পাদন করতে সিএমডি স্ট্রাক্ট প্রদান করে।

প্রত্যাবর্তিত সিএমডির আরগস ক্ষেত্রটি আর্গের উপাদানগুলির সাহায্যে কমান্ড নাম থেকে নির্মিত হয়, সুতরাং আরগটি কমান্ডের নামটি নিজের মধ্যে অন্তর্ভুক্ত করা উচিত নয়। উদাহরণস্বরূপ, আদেশ ("প্রতিধ্বনি", "হ্যালো")


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

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    name := "echo"
    args := []string{"hello", "world"}
    cmd := exec.Command(name, args...)
    out, err := cmd.Output()
    if err != nil {
        fmt.Println(err)
    }
    fmt.Println(string(out))
}

আউটপুট:

hello world

11

কমান্ড আর্গুমেন্টগুলির একটি তালিকা পতাকা প্যাকেজ Args()ফাংশন থেকে পুনরুদ্ধার করা যেতে পারে । তারপরে আপনি ভ্যারিয়েডিক ইনপুট স্টাইল ( func(input...)) ব্যবহার করে এটি কোনও ফাংশনে পাস করতে পারেন

স্পেক থেকে :

যদি চূড়ান্ত প্যারামিটার ধরণের ... টি এর সাথে চ পৃথক হয়, তবে ফাংশনের মধ্যে আর্গুমেন্ট প্রকারের [] টি এর পরামিতির সমতুল্য। চ এর প্রতিটি কলে, আর্গুমেন্টটি চূড়ান্ত প্যারামিটারে প্রেরণ করা হয় টাইপের একটি নতুন টুকরা [] টি যার ধারাবাহিক উপাদানগুলি আসল আর্গুমেন্ট, যা সকলকে অবশ্যই টি টাইপের জন্য নির্ধারিত হতে হবে T

উদাহরণ:

package main

import "fmt"

func echo(strings ...string) {
    for _, s := range strings {
        fmt.Println(s)
    }
}

func main() {
    strings := []string{"a", "b", "c"}
    echo(strings...) // Treat input to function as variadic
}

দেখুন যান বৈশিষ্ট আরো বিস্তারিত জানার জন্য।

খেলার মাঠ


6

ফানক কমান্ড

func Command(name string, arg ...string) *Cmd

কমান্ড প্রদত্ত যুক্তি দিয়ে নামযুক্ত প্রোগ্রামটি সম্পাদন করতে সিএমডি স্ট্রাক্ট প্রদান করে।

সুতরাং আপনাকে খুঁজে পাওয়া যায় এমন কমান্ডটি বের করতে হবে sliceA[0]এবং তারপরে সমস্ত আর্গুমেন্টকে একটি ভেরিয়েডিকের সাথে পাস করতে হবে তবে কমান্ডটি সরিয়ে ফেলতে হবে sliceA[1:]...

import "os/exec"
import "strings"
func main(){
    plainCommand  := "echo hello world"
    sliceA := strings.Fields(plainCommand)
    cmd := exec.Command(sliceA[0], sliceA[1:]...)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.