@@ -4832,6 +4832,145 @@ func main() {
48324832Since the first iota is declared with the value ` 3 `  (`  + 3 ` ), the next one has the value ` 4 ` 
48334833</b ></details >
48344834
4835+ <details >
4836+ <summary >What will be the output of the following block of code?:
4837+ 
4838+ ``` 
4839+ package main 
4840+   
4841+ import ( 
4842+ "fmt" 
4843+ "sync" 
4844+ "time" 
4845+ ) 
4846+   
4847+ func main() { 
4848+ var wg sync.WaitGroup 
4849+ 
4850+ wg.Add(1) 
4851+ go func() { 
4852+ time.Sleep(time.Second * 2) 
4853+ fmt.Println("1") 
4854+ wg.Done() 
4855+ }() 
4856+ 
4857+ go func() { 
4858+ fmt.Println("2") 
4859+ }() 
4860+ 
4861+ wg.Wait() 
4862+ fmt.Println("3") 
4863+ } 
4864+ ``` 
4865+ </summary ><br ><b >
4866+ 
4867+ Output: 2 1 3
4868+ 
4869+ [ Aritcle about sync/waitgroup] ( https://tutorialedge.net/golang/go-waitgroup-tutorial/ ) 
4870+ 
4871+ [ Golang package sync] ( https://golang.org/pkg/sync/ ) 
4872+ </b ></details >
4873+ 
4874+ <details >
4875+ <summary >What will be the output of the following block of code?:
4876+ 
4877+ ``` 
4878+ package main 
4879+ 
4880+ import ( 
4881+ "fmt" 
4882+ ) 
4883+ 
4884+ func mod1(a []int) { 
4885+ for i := range a { 
4886+ a[i] = 5 
4887+ } 
4888+ 
4889+ fmt.Println("1:", a) 
4890+ } 
4891+ 
4892+ func mod2(a []int) { 
4893+ a = append(a, 125) // ! 
4894+ 
4895+ for i := range a { 
4896+ a[i] = 5 
4897+ } 
4898+ 
4899+ fmt.Println("2:", a) 
4900+ } 
4901+ 
4902+ func main() { 
4903+ sl := []int{1, 2, 3, 4} 
4904+ mod1(s1) 
4905+ fmt.Println("1:", s1) 
4906+ 
4907+ s2 := []int{1, 2, 3, 4} 
4908+ mod2(s2) 
4909+ fmt.Println("2:", s2) 
4910+ } 
4911+ ``` 
4912+ </summary ><br ><b >
4913+ 
4914+ Output: <code ><br >
4915+ 1 [ 5 5 5 5] <br >
4916+ 1 [ 5 5 5 5] <br >
4917+ 2 [ 5 5 5 5 5] <br >
4918+ 2 [ 1 2 3 4] <br >
4919+ </code >
4920+ 
4921+ In ` mod1 `  a is link, and when we're using ` a[i] ` , we're changing ` s1 `  value to. 
4922+ But in ` mod2 ` , ` append `  creats new slice, and we're changing only ` a `  value, not ` s2 ` .
4923+ 
4924+ [ Aritcle about arrays] ( https://golangbot.com/arrays-and-slices/ ) ,
4925+ [ Blog post about ` append ` ] ( https://blog.golang.org/slices ) 
4926+ </b ></details >
4927+ 
4928+ <details >
4929+ <summary >What will be the output of the following block of code?:
4930+ 
4931+ ``` 
4932+ package main 
4933+ 
4934+ import ( 
4935+ "container/heap" 
4936+ "fmt" 
4937+ ) 
4938+ 
4939+ // An IntHeap is a min-heap of ints. 
4940+ type IntHeap []int 
4941+ 
4942+ func (h IntHeap) Len() int { return len(h) } 
4943+ func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] } 
4944+ func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } 
4945+ 
4946+ func (h *IntHeap) Push(x interface{}) { 
4947+ // Push and Pop use pointer receivers because they modify the slice's length, 
4948+ // not just its contents. 
4949+ *h = append(*h, x.(int)) 
4950+ } 
4951+ 
4952+ func (h *IntHeap) Pop() interface{} { 
4953+ old := *h 
4954+ n := len(old) 
4955+ x := old[n-1] 
4956+ *h = old[0 : n-1] 
4957+ return x 
4958+ } 
4959+ 
4960+ func main() { 
4961+ h := &IntHeap{4, 8, 3, 6} 
4962+ heap.Init(h) 
4963+ heap.Push(h, 7) 
4964+   
4965+  fmt.Println((*h)[0]) 
4966+ } 
4967+ ``` 
4968+ </summary ><br ><b >
4969+ 
4970+ Output: 3
4971+ 
4972+ [ Golang container/heap package] ( https://golang.org/pkg/container/heap/ ) 
4973+ </b ></details >
48354974## Mongo  
48364975
48374976<a  name =" mongo-beginner " ></a >
0 commit comments