foreach
গো ভাষায় কোনও নির্মাণ রয়েছে? আমি একটি ব্যবহার করে একটি স্লাইস বা অ্যারের মাধ্যমে পুনরাবৃত্তি করতে পারি for
?
range
মধ্যে for
লুপ এছাড়াও "একটি সেলা সম্পর্কে ধরন" উল্লেখ করা হয় যান টিউটোরিয়ালের অধ্যায় (এর শেষ দিকে)।
foreach
গো ভাষায় কোনও নির্মাণ রয়েছে? আমি একটি ব্যবহার করে একটি স্লাইস বা অ্যারের মাধ্যমে পুনরাবৃত্তি করতে পারি for
?
range
মধ্যে for
লুপ এছাড়াও "একটি সেলা সম্পর্কে ধরন" উল্লেখ করা হয় যান টিউটোরিয়ালের অধ্যায় (এর শেষ দিকে)।
উত্তর:
https://golang.org/ref/spec#For_range
একটি অ্যারে, স্লাইস, স্ট্রিং বা মানচিত্রের সমস্ত এন্ট্রি বা কোনও চ্যানেলে প্রাপ্ত মানগুলির মাধ্যমে "রেঞ্জ" ধারা সহ একটি "স্টেটমেন্ট" পুনরাবৃত্তি করে। প্রতিটি প্রবেশের জন্য এটি পুনরাবৃত্ত মানগুলিকে সংশ্লিষ্ট পুনরাবৃত্তকরণ ভেরিয়েবলগুলিতে নির্ধারণ করে এবং তারপরে ব্লকটি কার্যকর করে।
উদাহরণ হিসাবে:
for index, element := range someSlice {
// index is the index where we are
// element is the element from someSlice for where we are
}
আপনি যদি সূচকের বিষয়ে চিন্তা না করেন তবে আপনি ব্যবহার করতে পারেন _
:
for _, element := range someSlice {
// element is the element from someSlice for where we are
}
আন্ডারস্কোরটি _
হ'ল ফাঁকা শনাক্তকারী , একজন বেনামে স্থানধারক।
element
হয় মান উপাদান (একটি কপি) এর - এটি উপাদান নিজেই নয়। যদিও আপনি নির্ধারিত করতে পারেন element
, এটি অন্তর্নিহিত ক্রমকে প্রভাবিত করবে না।
_()
স্থানীয় নেমস্পেসের মতোই আলাদা করা হয়" যা কেবল কনভেনশন অনুসারে , এটি স্থানীয়করণ লাইবের অংশ নয়। আন্ডারস্কোরটি _
একটি বৈধ লেবেল, এবং এটি _
আপনি ব্যবহার করবেন না এমন ফেরতের মানগুলির জন্য নির্ধারিত গো (এবং পাইথন এবং স্কালা এবং অন্যান্য ল্যাঙ্গস) এও কনভেনশন । _
এই উদাহরণে স্কোপটি for
লুপের শরীরে সীমাবদ্ধ । আপনার যদি প্যাকেজ-স্কোপড ফাংশন থাকে _
তবে এটি ফর লুপের স্কোপের মধ্যে ছায়াযুক্ত হবে। স্থানীয়করণের জন্য কয়েকটি প্যাকেজ রয়েছে, আমি কোনও _
ফাংশন নাম হিসাবে কোনও ব্যবহার দেখিনি ।
foreach
গোতে একটি মত সিনট্যাক্স রয়েছে। এটি অ্যারে / স্লাইস, মানচিত্র এবং চ্যানেলগুলি সমর্থন করে।
অ্যারে বা স্লাইস উপর Iterate :
// index and value
for i, v := range slice {}
// index only
for i := range slice {}
// value only
for _, v := range slice {}
একটি মানচিত্রে Iterate :
// key and value
for key, value := range theMap {}
// key only
for key := range theMap {}
// value only
for _, value := range theMap {}
একটি চ্যানেলের মাধ্যমে পরিবেশন করুন :
for v := range theChan {}
কোনও চ্যানেলকে পর্যালোচনা করা চ্যানেলটি বন্ধ না হওয়া অবধি প্রাপ্তির সমতুল্য:
for {
v, ok := <-theChan
if !ok {
break
}
}
chan
ব্যবহার সম্পর্কে গুরুত্বপূর্ণ পার্থক্য : কোনও চ্যানেল জুড়ে যদি লেখক কোনও পর্যায়ে চ্যানেলটি বন্ধ করে দেয় তবে মনোযোগ দিয়ে লুপটি প্রস্থান করবে। ইন for {v := <-theChan}
সমতুল্য , এটা হবে না চ্যানেল ঘনিষ্ঠ উপর থেকে প্রস্থান করুন। দ্বিতীয় ok
রিটার্ন মানের মাধ্যমে আপনি এটি পরীক্ষা করতে পারেন। টুর উদাহরণ
for { ... }
অসীম লুপের জন্য দাঁড়িয়ে।
নিম্নলিখিত উদাহরণটি দেখায় যে কীভাবে range
একটি for
লুপ প্রয়োগ করতে অপারেটরটিকে একটি লুপে ব্যবহার করতে হয় foreach
।
func PrintXml (out io.Writer, value interface{}) error {
var data []byte
var err error
for _, action := range []func() {
func () { data, err = xml.MarshalIndent(value, "", " ") },
func () { _, err = out.Write([]byte(xml.Header)) },
func () { _, err = out.Write(data) },
func () { _, err = out.Write([]byte("\n")) }} {
action();
if err != nil {
return err
}
}
return nil;
}
উদাহরণস্বরূপ ফাংশনগুলির জন্য ত্রুটি পরিচালনার ক্ষেত্রে একীকরণের জন্য ক্রিয়াগুলির একটি অ্যারের উপরে পুনরাবৃত্তি হয়। একটি সম্পূর্ণ উদাহরণ গুগলের খেলার মাঠে ।
পিএস: এটিও দেখায় যে হ্যাং ব্রেসগুলি কোডের পাঠযোগ্যতার জন্য একটি খারাপ ধারণা are ইঙ্গিত: for
শর্তটি action()
কল করার ঠিক আগেই শেষ হয় । স্পষ্টত, তাই না?
,
এবং এটি স্পষ্ট যেখানে for
শর্তটি শেষ হয়: play.golang.org/p/pcRg6WdxBd - এই প্রথম go fmt
শৈলীতে একটি পাল্টা যুক্তি খুঁজে পেয়েছি , ধন্যবাদ!
আপনি প্রকৃতপক্ষে range
এর for range
প্রকারের বিরুদ্ধে ব্যবহার করে এর রিটার্ন মানগুলি উল্লেখ না করে ব্যবহার করতে পারেন :
arr := make([]uint8, 5)
i,j := 0,0
for range arr {
fmt.Println("Array Loop",i)
i++
}
for range "bytes" {
fmt.Println("String Loop",j)
j++
}
গোলাংয়ে কীভাবে ফোরচ ব্যবহার করবেন তার উদাহরণ কোড নীচে দেওয়া হল
package main
import (
"fmt"
)
func main() {
arrayOne := [3]string{"Apple", "Mango", "Banana"}
for index,element := range arrayOne{
fmt.Println(index)
fmt.Println(element)
}
}
এটি একটি চলমান উদাহরণ https://play.golang.org/p/LXptmH4X_0
হ্যাঁ, ব্যাপ্তি :
লুপের রেঞ্জের ফর্মটি একটি স্লাইস বা মানচিত্রের উপরে পুনরাবৃত্তি করে।
একটি স্লাইস উপরের যখন, প্রতিটি পুনরাবৃত্তির জন্য দুটি মান প্রদান করা হয়। প্রথমটি সূচক এবং দ্বিতীয়টি সেই সূচকের উপাদানটির অনুলিপি।
উদাহরণ:
package main
import "fmt"
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
func main() {
for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}
for i := range pow {
pow[i] = 1 << uint(i) // == 2**i
}
for _, value := range pow {
fmt.Printf("%d\n", value)
}
}
এটি সুস্পষ্ট হতে পারে তবে আপনি অ্যারের মতো করেও ইনলাইন করতে পারেন:
package main
import (
"fmt"
)
func main() {
for _, element := range [3]string{"a", "b", "c"} {
fmt.Print(element)
}
}
আউটপুট:
abc