How go code is being compiled to assembler code

https://go.godbolt.org/z/31FyJ3
I was interested in comparing line 15 vs line 17 of the following code:

package main

import "fmt"

type kv struct {
	key   []byte
	value []byte
}

type sliceMap []kv

func (sm *sliceMap) Add(k, v []byte) {
	kvs := *sm
	if cap(kvs) > len(kvs) {
		kvs = kvs[:len(kvs)+1]
	} else {
		kvs = append(kvs, kv{})
	}
	kv := &kvs[len(kvs)-1]
	kv.key = append(kv.key[:0], k...)
	kv.value = append(kv.value[:0], v...)
	*sm = kvs
}

func main() {
	sm := sliceMap{}
	sm.Add([]byte("foo"), []byte("bar"))
	fmt.Println(sm)
}

LEAVE A COMMENT