@@ -4832,6 +4832,145 @@ func main() {
4832
4832
Since the first iota is declared with the value ` 3 ` (` + 3 ` ), the next one has the value ` 4 `
4833
4833
</b ></details >
4834
4834
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 >
4835
4974
## Mongo
4836
4975
4837
4976
<a name =" mongo-beginner " ></a >
0 commit comments