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

рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ?
рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛ рдХреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЧреЛ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдореИрдВ рдЦреБрдж рдПрдХ рд╕реА ++ / рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ рд╣реВрдВ рдФрд░ рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рдВрдпреЛрдЬрди рдорд╕реНрддреВрд▓ рдЧреЛ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИ:
- рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдмреИрдХрдПрдВрдб рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╛рдХреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдо рд╣реА рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рдХреЗ рд▓рд┐рдП рджреЛ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬреЛрдбрд╝реЗ рд╣реИрдВ: рдЬрд╛рд╡рд╛ / рд╕реА # рдФрд░ рдкрд╛рдпрдерди / рд░реВрдмреАред рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди / рд░реВрдмреА рдХреА рдЬреЛрдбрд╝реА рд╕реЗ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рд▓реЗрдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╣реИред
- рдЧреЛ рдЕрдкрдиреЗ рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реА рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЫрд┐рдкреЗ рдирд╣реАрдВ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЧреЛ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдмрд┐рдВрджреБ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрднреА-рдХрднреА рдЧреЛ рд╕рдВрдХрд▓рдХ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕реА рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рдордЭрддреЗ рд╣реБрдП рдХрд┐ рдЧреЛ рдХреБрдЫ рдЕрд░реНрдереЛрдВ рдореЗрдВ рд╕реА рдХрд╛ рдПрдХ рд╕реБрдкрд░рд╕реЗрдЯ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрд▓рдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрд╛рд╡рд╛ / рд╕реА # рдЬреЛрдбрд╝реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЧреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рдХрднреА рднреА рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзреА рдирд╣реАрдВ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЬрдм рд╡рд╣ рдпреБрд╡рд╛ рд╣реИ (рд╣рдо рдЧреЛ рд╕рдВрд╕реНрдХрд░рдг 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 . : , . , ( RTTI) , .
, , .
- Go , . .
- Go . - : ┬л 5, 3┬╗. , тАФ , 4. , .
- . . . . .
- STL , . , map array. .