Slide 1

Slide 1 text

G r le se 1.20 L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 2

Slide 2 text

T me in 4 1 .1.2 - 1.2 R 4 1 .1.2 - d e s 4 1.2.2 - 1.2 r d! 4 4-5.2.2 - F 2 - M E - S G 4 6.2.2 - u o'G - 1.2 o ! ... 4 1 .2.2 - 1.2 .1 4 1 .2.2 - T #2 - W 's e 1.2 4 2 .2.2 - u m ;-) L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 2

Slide 3

Slide 3 text

R le se ot s 4 g .d /d /g .2 4 g .2 L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 3

Slide 4

Slide 4 text

L ng ag c an es 4 g s: comparable s i c {} 4 n n SliceData, String, StringData unsafe p 4 d c i o a s a 4 e o w a e s n s e a c d L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 4

Slide 5

Slide 5 text

G ne ic : C mp ra le on tr in func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } 4 N s y c b interface{}, l r u p r ! L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 5

Slide 6

Slide 6 text

S mp if s nt x li e -> a ra s 1.1 slice := []int{1,2,3, 4} array := (*[4]byte)(slice) s 1.2 slice := []int{1,2,3, 4} array := [4](slice) L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 6

Slide 7

Slide 7 text

T ol mp ov me ts 4 c o s p l 4 g b , i a -pgo n -cover a 4 c d d d 4 g e i m L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 7

Slide 8

Slide 8 text

G v t package main import ( "fmt" "time" ) func main() { now := time.Now() now.Format("2006-02-01") fmt.Println(now) } $ go vet main.go # command-line-arguments ./main.go:10:14: 2006-02-01 should be 2006-01-02 L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 8

Slide 9

Slide 9 text

C ve p o l s n ac ag l ve go test -coverprofile=... 4 h ://g .d /t /c e/ L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 9

Slide 10

Slide 10 text

B il w th ov r go build -cover -o myprogram.exe . go build -cover -o myprogramMorePkgs.exe -coverpkg=io,mydomain.com,rsc.io/quote .` L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 11

Slide 11 text

R n o et at mkdir somedata GOCOVERDIR=somedata ./myprogram.exe GOCOVERDIR=somedata ./myprogram.exe --flag 4 y a u i m e t , c r p l L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 12

Slide 12 text

W rk ng it c ve ag d ta l s go tool covdata -i= ...flags... go tool covdata percent -i=somedata go tool covdata merge -i=windows_datadir,macos_datadir -o merged L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 13

Slide 13 text

S an ar l br ry dd ti ns 4 T e crypto/ecdh p p s e t s o E c C D e-H e e e e S c n C 5 . 4 T e f n e .J r e w g s e w a o d a h e p i n h Unwrap() []error m . 4 T e http.ResponseController p p s a e d p - r f n o h h http.ResponseWriter i c . 4 T httputil.ReverseProxy f i p i s e R o f n, s d h p s D r h . L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 14

Slide 14 text

S an ar l br ry dd ti ns I 4 T e context.WithCancelCause f n p s a c a c t a g e . a e a r e b c h e context.Cause f n. 4 T e os/exec.Cmd e C n W a s h b r h m e t a t C c d i p e . 4 I time p e a e e c t DateTime, DateOnly n TimeOnly L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 15

Slide 15 text

E ro s Unwrap() error Unwrap() []error wrapsErr := fmt.Errorf("... %w ...", ..., err, ...) if errors.Is(err, fs.ErrExist) err1 := errors.New("err1") err2 := errors.New("err2") err := errors.Join(err1, err2) L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 16

Slide 16 text

R sp ns Co tr ll r func RequestHandler(w ResponseWriter, r *Request) { rc := http.NewResponseController(w) rc.SetWriteDeadline(time.Time{}) // disable Server.WriteTimeout when sending a large response io.Copy(w, bigData) } 4 G I : n /h : a m a t s H L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 17

Slide 17 text

h tp.R ve se ro y proxyHandler := &httputil.ReverseProxy{ Rewrite: func(r *httputil.ProxyRequest) { r.SetURL(outboundURL) // Forward request to outboundURL. r.SetXForwarded() // Set X-Forwarded-* headers. r.Out.Header.Set("X-Additional-Header", "header set by the proxy") }, } 4 T e R e s e h i g r f h o g r n d a e h m t k e w a s f i p . L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 18

Slide 18 text

c nt xt.W th an el au e [^1] ctx, cancel := context.WithCancelCause(parent) cancel(myError) ctx.Err() // returns context.Canceled context.Cause(ctx) // returns myError L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 19

Slide 19 text

o /e ec.C d ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond) defer cancel() if err := exec.CommandContext(ctx, "sleep", "5").Run(); err != nil { // This will fail after 100 milliseconds. The 5 second sleep // will be interrupted. } 4 T e m e Cancel n WaitDelay s h b r o h m e t a t C c d t p e t I/O p s l e a c p . L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 1

Slide 20

Slide 20 text

C tP e x / C tS x s := "https://github.com" str, ok := strings.CutPrefix(s, "https://") if ok { fmt.Println(str) } else { fmt.Println(s) } L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 2

Slide 21

Slide 21 text

T me on ta t pd te DateTime = "2006-01-02 15:04:05" DateOnly = "2006-01-02" TimeOnly = "15:04:05" L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 2

Slide 22

Slide 22 text

I pr ve p rf rm nc 4 C r n g c o i m v r m o d n i d o P p a 2%. 4 W s c t n c t t e b i m 1 %. i b b s c n t 1.1 . L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 2

Slide 23

Slide 23 text

R fe en es C M. J n i s p r g a r 1.2 4 h ://b .c h .n /p /2 /g -1 -l e- c / 4 h ://b .c h .n /p /2 /g -1 -a - e -r e l / 4 h ://b .c h .n /p /2 /g -1 -m - f s/ L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 2

Slide 24

Slide 24 text

w w.g me tu pr gu .c @g me tu pr gu @f ss od n.o g L v P c (P S ) - @a @h r .i - M P #1 , 2 .2. 2 2