Dmitry Telenkov 1 هفته پیش
والد
کامیت
b9a1d3b9e1
3فایلهای تغییر یافته به همراه129 افزوده شده و 0 حذف شده
  1. 58 0
      courses/golang_web/data_type/1/func_1.go
  2. 37 0
      courses/golang_web/data_type/1/func_2.go
  3. 34 0
      courses/golang_web/data_type/1/func_3.go

+ 58 - 0
courses/golang_web/data_type/1/func_1.go

@@ -0,0 +1,58 @@
+package main
+
+import "fmt"
+
+// обычное объявление
+func singleIn(in int) int {
+	return in
+}
+
+// много параметров
+func multIn(a, b int, c int) int {
+	return a + b + c
+}
+
+// именованный результат
+func nameReturn() (out int) {
+	out = 2
+	return
+}
+
+// несколько результатов
+func multipleReturn(in int) (int, error) {
+	if in > 2 {
+		return 0, fmt.Errorf("some error happend")
+	}
+	return in, nil
+}
+
+// несколько именованных параметров
+func multipleNamedReturn(ok bool) (rez int, err error) {
+	if ok {
+		err = fmt.Errorf("some error happend")
+		// аналогично return rez, err
+		// или return 1, fmt.Errorf("some error happend")
+	}
+	rez = 2
+	return
+}
+
+// не фиксированное количество параметров
+func sum(in ...int) (result int) {
+	fmt.Printf("in := %#v \n", in)
+	for _, val := range in {
+		result += val
+	}
+	return
+}
+
+func main() {
+	// fmt.Println(multipleNamedReturn(false))
+	// return
+
+	nums := []int{1, 2, 3, 4}
+	fmt.Println(nums, sum(nums...))
+
+	return
+
+}

+ 37 - 0
courses/golang_web/data_type/1/func_2.go

@@ -0,0 +1,37 @@
+package main
+
+import "fmt"
+
+func main() {
+	// анонимная функция
+	func(in string) {
+		fmt.Println("anon func out:", in)
+	}("nobody")
+
+	// присваивание анонимной функции в переменную
+	printer := func(in string) {
+		fmt.Println("printer outs:", in)
+	}
+	printer("as variable")
+
+	// определяем тип функции
+	type strFuncType func(string)
+
+	// функция принимает каллибек
+	worker := func(callback strFuncType) {
+		callback("as callback")
+	}
+	worker(printer)
+
+	// функция возвращает замыкание
+	prefixer := func(prefix string) strFuncType {
+		return func(in string) {
+			fmt.Printf("[%s] %s]\n", prefix, in)
+		}
+	}
+
+	successLogger := prefixer("SUCCESS")
+	successLogger("expected behaviour")
+
+	return
+}

+ 34 - 0
courses/golang_web/data_type/1/func_3.go

@@ -0,0 +1,34 @@
+package main
+
+import "fmt"
+
+/*
+func getSomeVars() string {
+	fmt.Println("getSomeVars execution")
+	return "getSomeVars result"
+}
+
+func main() {
+	defer fmt.Println("After work")
+	defer func() {
+		fmt.Println(getSomeVars())
+	}()
+	fmt.Println("Some useful work")
+}
+*/
+
+func deferTest() {
+	defer func() {
+		if err := recover(); err != nil {
+			fmt.Println("panic happend:", err)
+		}
+	}()
+	fmt.Println("Some useful work")
+	panic("something bad happend")
+	return
+}
+
+func main() {
+	deferTest()
+	return
+}