গো একটি স্ট্যাটিকালি টাইপ করা এবং সংকলিত প্রোগ্রামিং ল্যাঙ্গুয়েজ যেটি টেক জায়ান্ট গুগলের তিন জন প্রোগ্রামার ডিজাইন করেছে। গো ল্যাঙ্গুয়েজ সিনট্যাক্টিক্যালি সি ল্যাঙ্গুয়েজ এর সমান কিন্তু এর ম্যামরি সেফটি, আবর্জনা সংগ্রহ, কাঠামোগত টাইপিং এর দিক দিয়ে এটি অনেক ভালো পারফর্ম করে।
ফাইল এক্সটেনশন
FileName.go
ফাইল রান করা
go run FileName.go
এক্সেকিউটেবল ফাইল তৈরি করা
go build FileName.go
এক্সেকিউটেবল ফাইল রান করা
./FileName
বিন ফোল্ডার এর মধ্যে ফাইল বিল্ড করা
go install <package path>
নিচের লাইন ফাঁকা রেখে কিছু প্রিন্ট করা
fmt.Println("hello world")
নিচের লাইন না ফাঁকা রেখে কিছু প্রিন্ট করা
fmt.Print("hello world")
ইউজার এর থেকে ইনপুট নেয়া
var name string
fmt.Scanln(&name)
স্ট্রিং ফরম্যাট করে প্রিন্ট করা
var a = 10 fmt.Printf("%v", a)
ভ্যালু না দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করা
var a int
ভ্যালু দিয়ে ভ্যারিয়েবল ডিক্লেয়ার করা
var a int = 10 / var a = 10
কোন ধরনের ডেটা টাইপ সেটা কম্পাইল টাইমে বুঝে নেয়া
a := 10 / msg := "Hello there!!!"
ইন্টেজার ভ্যারিয়েবল ডিক্লেয়ার করা
var a int = 20
ফ্ল্যোট ভ্যারিয়েবল ডিক্লেয়ার করা
var b float32 = 23.30
স্ট্রিং ভ্যারিয়েবল ডিক্লেয়ার করা
var b string = "Hello Programmer"
বুলিয়ান ভ্যারিয়েবল ডিক্লেয়ার করা
var b bool = true
কন্সট্যান্ট ভ্যারিয়েবল ডিক্লেয়ার করা
const Phi = 1.618
ভ্যারিয়েবল এর টাইপ দেখা
a := 45
fmt.Printf("%T", a)
// int
ইন্টিজারকে ফ্ল্যোট এ রূপান্তর করা
var i int = 45
var j float 32
j = float32(i)
ফ্ল্যোট কে ইন্টিজার এ রূপান্তর করা
var i float32 = 45.23
var j int
j = int(i)
ইন্টিজারকে স্ট্রিং এ রূপান্তর করা
var i int = 45
var j float 32
j = strconv.Itoa(i)
একটি ফাঁকা ম্যাপ তৈরি করা
population := map[string]int{}
বিল্ট ইন ম্যাপ ফাংশান দিয়ে ম্যাপ তৈরি করা
population := make(map[string]int)
একটি ভ্যালু সহ ম্যাপ তৈরি করা
population := map[string]int{
"dhaka" : 3000323,
"chattagram" : 2000353,
"sylhet" : 1005423,
"khulna" : 3000323, }
ম্যাপ এর কোন একটি ভ্যালু দেখা
population["dhaka"]
// 3000323
ম্যাপ এ নতুন কোন ভ্যালু যোগ করা
population["rajshahi"] = 1203839
ম্যাপ থেকে কোন ভ্যালু মুছে ফেলা
delete(population, "dhaka")
ম্যাপ এর লেন্থ বের করা
len(population)
type Doctor struct {
number int
actorName string
}
aDoctor := Doctor {
number: 3,
actorName: "Jon Pertwee",
}
fmt.Println(aDoctor)
myfunc := func() bool {
case 1:
fmt.Println("One"}
case 2:
fmt.Println("Two"}
default:
fmt.Println("none"}
ফর লুপ
for i:= 0; i < 10; i++ {
fmt.Println(i)
}
লুপের বাইরে ভ্যারিয়েবল ইনিশিয়ালাইজ করে ফর লুপ তৈরি করা
i := 0
for ; i < 10; i++ {
fmt.Print(i)
}
এরের উপর ফর লুপ চালানো/ রেঞ্জ
for k, v := range s {}
// এখানে k হচ্ছে key, v হচ্ছে value এবং s হচ্ছে এরের নাম
হোয়াইল এর মত ফর লুপ ব্যবহার করা
for condition {}
type Devsonk struct {
X, Y float64
}
func (v Devsonk) Abs() float64 {
return math.Sqrt(v.X * v.X + v.Y * v.Y)
}
v := Devsonk{1, 2}
v.Abs()
ডিফল্ট ফরম্যাট এ ভ্যালু দেখা
%v
float ফরম্যাট এ ভ্যালু দেখা
%.1f// এখানে 1 হচ্ছে ডিসিম্যাল পজিশন এর সংখ্যা
ভ্যারিয়েবল এর টাইপ দেখা
%T
বুলিয়ান true false প্রিন্ট করা
%t
ক্যারেক্টার প্রিন্ট করা
%c
বেইজ ১০ এ ভ্যারিয়েবল প্রিন্ট করা
%d
বেইজ ৮ এ ভ্যারিয়েবল প্রিন্ট করা
%o
বেইজ ১৬ তে ছোট অক্ষর (a-f) এর ভ্যারিয়েবল প্রিন্ট করা
%x
বেইজ ১৬ তে বড় অক্ষর (A-F) এর ভ্যারিয়েবল প্রিন্ট করা
%X
স্ট্রিং এর সাথে নতুন লাইন যোগ করা
\n
অক্ষর
rune
পূর্ণসংখ্যা
int/int32/int64
ফ্লোটিং পয়েন্ট সংখ্যা
float/float32/float64
বুলিয়ান
bool
স্ট্রিং
string
পয়েন্টার টাইপ
*type (যেকোনো ডাটা টাইপ, যেমন int, float, string)
ইনপুট নিয়ে কাজ করার জন্য রিড ফাংশন ব্যবহার করা হয়
fmt.Scan(&a)
একটি লাইন এর ইনপুট নিয়ে কাজ করার জন্য রিডলাইন ফাংশন ব্যবহার করা হয়
fmt.Scanln(&a)
একাধিক লাইন এর ইনপুট নিয়ে কাজ করার জন্য রিডস্ট্রিং ফাংশন ব্যবহার করা হয়
fmt.Scanf(&a)
var (
count int = 0
msg string = "Hello"
amount float32 = 45.6
)
const (
count int = 0
msg string = "Hello"
amount float32 = 45.6
)
নতুন একটি এরে তৈরি করা
numbers := [3]int{12, 32, 43}
এরে সাইজ ডিক্লেয়ার না করে এরে তৈরি করা
grades := [...]int{23, 54, 33, 90]
ফাঁকা এরে তৈরি করা
var students [3]string
এরের কোন ইনডেক্স এ ভ্যালু সেট করা
students[0] = "John"
এরের সাইজ বের করা
len(students)
বিল্ট-ইন ফাংশান দিয়ে এরে তৈরি করা এবং সব ভ্যালু শূন্য সেট করা
a := make([]int, 3)
// [0 0 0]
ইফ এলস
if condition {} else {}
ইফ এলস এর উদাহরণ
if age < 18 {fmt.Println("You are underage."} else {"You are matured."}
ইফ এলস এলস ইফ এর উদাহরণ
if age < 18 {fmt.Println("You are underage."} else if age == 18 {"You are good to go."} else {"You are over aged."}
বুলিয়ান ইফ স্টেট্ম্যান্ট
if true {fmt.Println("This is true"}
// This is true
বুলিয়ান ইফ স্টেট্ম্যান্ট (2)
if false {fmt.Println("This is true"}
// কিছু দেখাবে না। কারণ মিথ্যা হলে পরের লাইন এক্সেকিউট হয় না
Utility
func TrackTime(pre time.Time) time.Duration {
elapsed := time.Since(pre)
fmt.Println(`elapsed:`, elapsed) }
'Time now'
func TestTrackTime(t *testing.T) {
defer TrackTime(time.Now()) // <--- THIS
time.Sleep(500 * time.Millisecond)
}
আর্গুমেন্ট ছাড়া কোন একটি ফাংশান তৈরি করা
func message(){}
আর্গুমেন্ট সহ ফাংশান তৈরি করা
func greeting(msg string, nmbr int){}
রিসিভার সহ ফাংশান তৈরি করা
func (p Persion)greeting(msg string, nmbr int) string {}
বেনামি ফাংশান
func () {}()
একটি পয়েন্টার তৈরি করা
a := 5
b := &a // পয়েন্টার এড্রেস তৈরি করতে ভ্যারিয়েবল এর আগে & চিহ্ন দেয়া লাগে
পয়েন্টার এড্রেস থেকে ভ্যালু নেয়া
c := *b //
পয়েন্টার দিয়ে ভ্যারিয়েবল এর ভ্যালু পরিবর্তন করা
a := 5
b := &a
*b = 10
গোরুটাইন তৈরি করা
go func() {
// কোড লিখতে হবে
}()
চ্যানেল তৈরি করা
ch := make(chan int)
চ্যানেল এ ভ্যালু পাঠান
ch <- 5
চ্যানেল থেকে ভ্যালু নেয়া
val := <- ch
চ্যানেল এর সাইজ নির্ধারণ করা
ch := make(chan int, 5)