ok, diky za info. nenapadlo by ma ze spravit regex ktory len vyhlada funkciu ktorej telo medzi {} moze byt hocico(tzn len naparuje tu zatvorku) je taky problem.
tak som si spravil skript na to na koniec. na kolene na rychlo ale funguje:
package main
import (
	"bufio"
	"bytes"
	"errors"
	"io"
	"os"
	"path/filepath"
)
func main() {
	args := os.Args
	if len(args) != 2 {
		println("missing file argument")
		return
	}
	src, err := os.OpenFile(filepath.Clean(args[1]), os.O_RDWR, 0666)
	if err != nil {
		println(err.Error())
		return
	}
	defer func() {
		if err := src.Close(); err != nil && errors.Is(err, os.ErrClosed) == false {
			println(err.Error())
		}
	}()
	s := bufio.NewScanner(src)
	s.Split(bufio.ScanLines)
	fTok := []byte("func ")
	openTok := []byte{'{'}
	closeTok := []byte{'}'}
	emptyTok := []byte{'{', '}'}
	matches := make([][]byte, 0, 500)
	var match bool
	for {
		if s.Scan() == false {
			break
		}
		if match == false {
			if bytes.HasPrefix(s.Bytes(), fTok) && (bytes.HasSuffix(s.Bytes(), openTok) || bytes.HasSuffix(s.Bytes(), emptyTok)) {
				matches = append(matches, append(make([]byte, 0, len(s.Bytes())), s.Bytes()...))
				matches[len(matches)-1] = append(matches[len(matches)-1], '\n')
				match = bytes.HasSuffix(s.Bytes(), openTok)
			}
		} else {
			matches[len(matches)-1] = append(matches[len(matches)-1], s.Bytes()...)
			matches[len(matches)-1] = append(matches[len(matches)-1], '\n')
			match = bytes.Equal(s.Bytes(), closeTok) == false
		}
	}
	if len(matches) == 0 {
		return
	}
	if _, err := src.Seek(0, io.SeekStart); err != nil {
		println(err.Error())
		return
	}
	data, err := io.ReadAll(src)
	if err != nil {
		println(err.Error())
		return
	}
	for k := range matches {
		data = bytes.Replace(data, matches[k], nil, 1)
	}
	if _, err := src.Seek(0, io.SeekStart); err != nil {
		println(err.Error())
		return
	}
	if err := src.Truncate(0); err != nil {
		println(err.Error())
		return
	}
	if _, err := src.Write(data); err != nil {
		println(err.Error())
		return
	}
}