func genGoFile()

in internal/generate/generate.go [38:101]


func genGoFile(build Build, service string) error {
	pkg := strings.ReplaceAll(service, "-", "_")
	pkgPath := fmt.Sprintf("%s/%s", workspace, pkg)

	_, err := os.Stat(pkgPath)
	if os.IsNotExist(err) {
		err := os.Mkdir(pkgPath, os.ModePerm)
		if err != nil {
			return err
		}
	}

	var so string
	if build.GOOS == "darwin" {
		so = "dylib"
	} else if build.GOOS == "linux" {
		so = "so"
	} else {
		so = "dll"
	}
	err = os.Rename(
		fmt.Sprintf("%s/libopendal_c_%s_%s_%s/libopendal_c.%s.%s.zst", workspace, version, service, build.Target, build.Target, so),
		fmt.Sprintf("%s/%s/libopendal_c.%s.%s.%s.zst", workspace, pkg, build.GOOS, build.GOARCH, so))
	if err != nil {
		return err
	}

	for _, t := range tpls.Templates() {
		fileTpl := template.Must(template.New("file").Parse(t.Name()))
		var buf bytes.Buffer
		err := fileTpl.Execute(&buf, map[string]string{
			"os":   build.GOOS,
			"arch": build.GOARCH,
		})
		if err != nil {
			return fmt.Errorf("parse filename: %s:%s", t.Name(), err)
		}
		targetFile := fmt.Sprintf("%s/%s/%s", workspace, pkg, strings.Trim(buf.String(), ".tpl"))
		os.Remove(targetFile)

		file, err := os.OpenFile(targetFile, os.O_CREATE|os.O_WRONLY, os.ModePerm)
		if err != nil {
			return fmt.Errorf("open file: %s: %s", t.Name(), err)
		}
		defer file.Close()

		if err := t.Execute(file, map[string]string{
			"pkg":  pkg,
			"os":   build.GOOS,
			"arch": build.GOARCH,
			"so":   so,
		}); err != nil {
			return fmt.Errorf("execute template: %s: %s", t.Name(), err)
		}
	}
	cmd := exec.Command("go", "mod", "tidy")
	cmd.Dir = pkgPath
	output, err := cmd.Output()
	if err != nil {
		return err
	}
	fmt.Printf("%s\n", output)
	return nil
}