рдпрджрд┐ рдЖрдк рдЧреЛ рдкрд░ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдЖрдкрдХрд╛ рдкрд╕рдВрджреАрджрд╛ рдкрд╛рд▓рддреВ рдЧреЛ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдЖрдкрд╕реЗ рдЕрдзрд┐рдХ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЕрднреА рднреА рдирд╣реАрдВ рд╣реИ? рд╕рдордп рдмрд░реНрдмрд╛рдж рдордд рдХрд░реЛ ... рдРрд╕рд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╛рдардХ рдХреЛ рдЧреЛ рдкрд░ рд▓реЗрдЦреЛрдВ рдХреА рдмрд╣реБрддрд╛рдпрдд рд╕реЗ рдЖ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдХрдВрдкрдирд┐рдпреЛрдВ рдХреЛ рднреА рдЗрд╕ рднрд╛рд╖рд╛ рдореЗрдВ рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рдЖрдкрдиреЗ рдХрднреА рдХрд┐рд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдорд╣рд╛рд░рдд рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЕрдЬреАрдм рдЪреАрдЬреЗрдВ рджрд┐рдЦрд╛рдПрдВ, рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреНрдпреЛрдВ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЖрдк рдЦреБрдж рддрдп рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЖрдкрдХреЛ рдЧреЛ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рдирд╣реАрдВред

рдЧреБрдУ рдПрдХ рдкреЛрд░реНрдЯреЗрдмрд▓ рд╕реА рд╣реИ


рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?


рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЧреЛ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдореИрдВ рдЦреБрдж рдПрдХ рд╕реА ++ / рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ рдФрд░ рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдВрдпреЛрдЬрди рдорд╕реНрддреВрд▓ рдЧреЛ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:

  • рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдмреИрдХрдПрдВрдб рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╣реА рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рдХреЗ рд▓рд┐рдП рджреЛ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреЛрдбрд╝реЗ рд╣реИрдВ: рдЬрд╛рд╡рд╛ / рд╕реА # рдФрд░ рдкрд╛рдпрдерди / рд░реВрдмреАред рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди / рд░реВрдмреА рдХреА рдЬреЛрдбрд╝реА рд╕реЗ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рд▓реЗрдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИред
  • рдЧреЛ рдЕрдкрдиреЗ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЫрд┐рдкреЗ рдирд╣реАрдВ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЧреЛ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдмрд┐рдВрджреБ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрднреА-рдХрднреА рдЧреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рдордЭрддреЗ рд╣реБрдП рдХрд┐ рдЧреЛ рдХреБрдЫ рдЕрд░реНрдереЛрдВ рдореЗрдВ рд╕реА рдХрд╛ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрд▓рдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВред


рдЬрд╛рд╡рд╛ / рд╕реА # рдЬреЛрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЧреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдирд╣реАрдВ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬрдм рд╡рд╣ рдпреБрд╡рд╛ рд╣реИ (рд╣рдо рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг 1.11 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ)ред

рд▓реЗрдЦ рдореЗрдВ рдХреНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛


  • рд╣рдо рдпрд╣ рдирд╣реАрдВ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдЧреЛ рдЦрд░рд╛рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ X рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рдИ рднрд╛рд╖рд╛ рдореЗрдВ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рднрд╛рд╖рд╛ рдХреЗ рдЦреЗрд▓ рдХреЗ рдЕрдкрдиреЗ рдирд┐рдпрдо, рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдЕрдкрдиреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдХрд┐рд╕реЗ рдзреЛрдЦрд╛ рджреЗ рд░рд╣рд╛ рд╣реВрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреА рд╣реЛрдЧреАред
  • рд╣рдо рд╕реАрдзреЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рд╕рдВрдХрд▓рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред


рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рдЕрд╕реБрд╡рд┐рдзрд╛ рдХреЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗ рдЬреЛ рднрд╛рд╖рд╛ рдХрд╛рдо рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рддреА рд╣реИред

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ


рднрд╛рд╖рд╛ рдореИрдиреБрдЕрд▓ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдЪрдп рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдСрдирд▓рд╛рдЗрди рдкреБрд╕реНрддрдХ рдкрд░рд┐рдЪрдп рд╣реИ ред рдпрд╣ рдкрдврд╝рдХрд░ рдХрд┐ рдЖрдк рдмрд╣реБрдд рдЬрд▓реНрджреА рдЕрдЬреАрдм рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдПрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдмреИрдЪ рджреЗрддреЗ рд╣реИрдВ:

рдЕрдЬрдирдмреА рдХрдВрдкрд╛рдЗрд▓рд░


рдХреЗрд╡рд▓ рдорд┐рд╕реНрд░ рдХреЗ рдХреЛрд╖реНрдардХ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ
рдХреЗрд╡рд▓ рдорд┐рд╕реНрд░ рдХреЗ рдХреЛрд╖реНрдардХ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ:
package main

func main()  //  
{

}

, . тАФ .

a := []string{
	"q"  //  ,  
}

-, . , , .

? !
, .
package main

func main() {
	a := []string{
		"q",
	}
	//  ,   
}


, , , , . , . , . .
, . - .

, :
for _, value := range x {
    total += value
}



. .

┬л┬╗


. , , .

:
┬л , (..: ) . , , , , Java, C/C++, Python. , , . .┬╗

: Go .

?
var x map[string]int
x["key"] = 10

:
panic: runtime error: assignment to entry in nil map


┬л┬╗ . , ?
tyderh , :
, , , . , .


:
  var i32 int32 = 0
  var i64 int64 = 0
  
  if i64 == i32 {
    
  }

, . Go (!) , , :
package main

import (
	"fmt"
)

func eq(val1 interface{}, val2 interface{}) bool {
	return val1 == val2
}

func main() {
	var i32 int32 = 0
	var i64 int64 = 0
	var in int = 0

	fmt.Println(eq(i32, i64))
	fmt.Println(eq(i32, in))
	fmt.Println(eq(in, i64))
}

, . false, , . , .

powerman :
func returnsError(t bool) error {
	var p *MyError = nil
	if t {
		p = ErrBad
	}
	return p // Will always return a non-nil error.
}
err := returnsError(false)
if err != nil {
  # 
}

nil nil, . FAQ .

. , ( ) . :
package main

import "fmt"

type storage struct {
	name string
}

var m map[string]storage

func main() {
	m = make(map[string]storage)
	m["pen"] = storage{name: "pen"}

	if data, ok := m["pen"]; ok {
		data.name = "-deleted-"
	}

	fmt.Println(m["pen"].name) // Output: pen
}

pen. :
package main

import "fmt"

type storage struct {
	name string
}

var m map[string]*storage

func main() {
	m = make(map[string]*storage)
	m["pen"] = &storage{name: "pen"}

	if data, ok := m["pen"]; ok {
		data.name = "-deleted-"
	}

	fmt.Println(m["pen"].name) // Output: -deleted-
}

"-deleted-", , , , ┬л┬╗ .
?
:
m = make(map[string]storage)
:
m = make(map[string]*storage)


, ? , :
package main

import "fmt"

var globState string = "initial"

func getState() (string, bool) {
	return "working", true
}

func ini() {
	globState, ok := getState()
	if !ok {
		fmt.Println(globState)
	}
}

func main() {
	ini()
	fmt.Println("Current state: ", globState)
}

initial := . - ok. ,
globState, ok := getState()
globState = getState()

, IDE , , .

, PVS Go.

: , .


┬л┬╗


, , . , . .
, :
make([]int, 50, 100)
new([100]int)[0:50]

, , new, . .

, :
var i int = 3
j := 6

, , var .

, Go .

┬л┬╗


, :
result, err := function()
if err != nil {
    // ...
}

Go, . Go . result, err := function(), result, err = function(). , . тАФ := = , .

┬л┬╗


Go, , , , . .

- ┬л┬╗, . 2018 Go 2.0, , . , ┬л┬╗ .

. in not in. map :
if _, ok := elements["Un"]; ok {
}

тАФ , , .


Go . . . SQL JOIN ORM GO (gorm) :
db.Table("users").Select("users.name, emails.email").Joins("left join emails on emails.user_id = users.id").Scan(&results)

ORM :
query := models.DB.LeftJoin("roles", "roles.id=user_roles.role_id").
  LeftJoin("users u", "u.id=user_roles.user_id").
  Where(`roles.name like ?`, name).Paginate(page, perpage)

ORM . .

:
a.GET("/users/{name}", func (c buffalo.Context) error {
  return c.Render(200, r.String(c.Param("name")))
})

- , .



, ? : . : , . . ┬л ┬╗ ( , ).


, - :
elements := map[string]map[string]string{
		"H": map[string]string{
			"name":  "Hydrogen",
			"state": "gas",
		},
        }

, ? - , . :
elements := map[string](map[string]string){
        }

, go fmt, . .


. . ┬л ┬╗ .
helgihabr , 1.9 sync.Map.


. Go , :
if result != 1 {
    t.Fatalf("result is not %v", 1)
    }

, , assert . : https://github.com/vizor-games/golang-unittest.

:
assert.NotEqual(t, result, 1, "invalid result")



. , ┬л┬╗ . , . .
-:
string([]byte{'a'})

, :
y.(io.Reader)

. .
conversion, . static_cast ++.
type assertion . dynamic_cast ++.



vgo , JetBrains GoLand 2018.2, IDE :
vgo mod -vendor

, , . go2 .
1.11 . .


, Go, . , .
  • тАФ , .
  • тАФ go build . autotools/Makefile. , . тАФ , .
  • тАФ , . , - .
  • тАФ тАФ 1 . 1 , 1 .
  • тАФ .
  • тАФ , IDE . Go, .
  • тАФ Go , , . , Ruby .
  • . :
    package main
    
    import (
        "fmt"
        "os"
        "log"
    )
    
    func main() {
        file, err := os.Open("file.txt")
        if err != nil {
            log.Fatal(err)
        }
        defer file.Close()
    
      b, err := ioutil.ReadAll(file)
      fmt.Print(b)
    }
    
    defer file.Close()
    , , , . ( with).



Go . : , . , ( RTTI) , .
, , .


  • Go , . .
  • Go . - : ┬л 5, 3┬╗. , тАФ , 4. , .
  • . . . . .
  • STL , . , map array. .





Source: https://habr.com/ru/post/hi421259/


All Articles