Ontwikkel een Go-pakket voor herbruikbare functies
description
Met deze prompt kan de gebruiker een modulair en onderhoudbaar Go-pakket creëren dat codehergebruik bevordert, de ontwikkelingstijd verkort en de consistentie tussen projecten verhoogt. Het helpt problemen te voorkomen door goede pakketstructuur en exportregels toe te passen, wat beter is dan telkens nieuwe code schrijven.
prompt
Help me een Go-pakket te ontwerpen en te implementeren met herbruikbare functies die ik in meerdere projecten kan gebruiken. Beschrijf hoe i ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder geef ik een overzicht van hoe je een herbruikbaar Go-pakket kunt ontwerpen, structureren, exporteren en gebruiken, inclusief voorbeelden van functies voor stringconversie, JSON parsing en serialisatie.
### 1. Pakket structureren
Maak een aparte directory voor je pakket, bijvoorbeeld `mijnutils`. De structuur kan er als volgt uitzien:
```
mijnutils/
├── go.mod
└── utils.go
```
### 2. `go.mod` aanmaken
In de `mijnutils` directory, voer uit:
```bash
go mod init github.com/jouwgebruikersnaam/mijnutils
```
Hiermee wordt je module geconfigureerd.
### 3. Functies schrijven in `utils.go`
In `utils.go` definieer je je functies en maak je ze exporteerbaar door ze met een hoofdletter te beginnen.
```go
package mijnutils
import (
"encoding/json"
"strings"
)
// String omzetten naar hoofdletters
func ToUpperCase(s string) string {
return strings.ToUpper(s)
}
// String omzetten naar kleine letters
func ToLowerCase(s string) string {
return strings.ToLower(s)
}
// JSON serialisatie van een interface{} naar string
func ToJSON(v interface{}) (string, error) {
bytes, err := json.Marshal(v)
if err != nil {
return "", err
}
return string(bytes), nil
}
// JSON deserialisatie van string naar een map
func FromJSON(jsonStr string, out interface{}) error {
return json.Unmarshal([]byte(jsonStr), out)
}
```
### 4. Pakket gebruiken in een ander project
In je hoofdproject maak je een nieuwe directory en initialiseer je een go module:
```bash
mkdir mijnproject
cd mijnproject
go mod init github.com/jouwgebruikersnaam/mijnproject
```
Voeg je `mijnutils` module toe als dependency:
```bash
go get github.com/jouwgebruikersnaam/mijnutils
```
In je codebestand, bijvoorbeeld `main.go`, importeert en gebruikt je het pakket:
```go
package main
import (
"fmt"
"github.com/jouwgebruikersnaam/mijnutils"
)
func main() {
s := "hallo wereld"
// Gebruik string functies
fmt.Println(mijnutils.ToUpperCase(s))
fmt.Println(mijnutils.ToLowerCase(s))
// JSON serialisatie
data := map[string]interface{}{
"naam": "Jan",
"leeftijd": 30,
}
jsonStr, err := mijnutils.ToJSON(data)
if err != nil {
fmt.Println("Fout bij serialisatie:", err)
} else {
fmt.Println("JSON:", jsonStr)
}
// JSON deserialisatie
var result map[string]interface{}
err = mijnutils.FromJSON(jsonStr, &result)
if err != nil {
fmt.Println("Fout bij deserialisatie:", err)
} else {
fmt.Println("Gede-serialiseerd:", result)
}
}
```
### Samenvatting
- **Structuur:** Plaats je functies in een apart directory met `go.mod`.
- **Exporteren:** Functies die je wilt gebruiken, beginnen met een hoofdletter.
- **Gebruik:** Importeer je pakket in andere projecten via `go get` en gebruik de functies.
Wil je meer functies toevoegen of specifieke wensen?
provider: deepseek
model: deepseek-chat
Ik help je graag een herbruikbaar Go-pakket te ontwerpen. Hier is een complete handleiding:
## Pakketstructuur
```bash
mijnhulppakket/
├── go.mod
├── hulpfuncties/
│ ├── stringutils.go
│ ├── jsonutils.go
│ └── hulpfuncties.go
└── voorbeelden/
└── gebruik.go
```
## 1. go.mod bestand
```go
module github.com/jouwgebruikersnaam/mijnhulppakket
go 1.21
```
## 2. String utility functies (stringutils.go)
```go
package hulpfuncties
import (
"strings"
"unicode"
)
// NaarHoofdletters converteert een string naar hoofdletters
func NaarHoofdletters(s string) string {
return strings.ToUpper(s)
}
// NaarKleineLetters converteert een string naar kleine letters
func NaarKleineLetters(s string) string {
return strings.ToLower(s)
}
// CamelCase converteert naar camelCase
func NaarCamelCase(s string) string {
words := strings.Fields(strings.ToLower(s))
if len(words) == 0 {
return ""
}
result := words[0]
for _, word := range words[1:] {
if len(word) > 0 {
result += strings.ToUpper(string(word[0])) + word[1:]
}
}
return result
}
// VerwijderWitruimte verwijdert alle witruimte
func VerwijderWitruimte(s string) string {
return strings.Map(func(r rune) rune {
if unicode.IsSpace(r) {
return -1
}
return r
}, s)
}
```
## 3. JSON utility functies (jsonutils.go)
```go
package hulpfuncties
import (
"encoding/json"
"fmt"
"io"
"os"
)
// ParseJSON parseert JSON data naar een struct
func ParseJSON(data []byte, v interface{}) error {
return json.Unmarshal(data, v)
}
// NaarJSON converteert een struct naar JSON string
func NaarJSON(v interface{}) (string, error) {
data, err := json.Marshal(v)
if err != nil {
return "", err
}
return string(data), nil
}
// NaarJSONIndent converteert met indentatie
func NaarJSONIndent(v interface{}) (string, error) {
data, err := json.MarshalIndent(v, "", " ")
if err != nil {
return "", err
}
return string(data), nil
}
// LaadJSONBestand laadt JSON vanuit een bestand
func LaadJSONBestand(bestandspad string, v interface{}) error {
file, err := os.Open(bestandspad)
if err != nil {
return fmt.Errorf("kon bestand niet openen: %w", err)
}
defer file.Close()
data, err := io.ReadAll(file)
if err != nil {
return fmt.Errorf("kon bestand niet lezen: %w", err)
}
return json.Unmarshal(data, v)
}
// BewaarJSONBestand bewaart JSON naar een bestand
func BewaarJSONBestand(bestandspad string, v interface{}) error {
data, err := json.MarshalIndent(v, "", " ")
if err != nil {
return fmt.Errorf("kon niet marshallen: %w", err)
}
return os.WriteFile(bestandspad, data, 0644)
}
```
## 4. Hoofdbestand (hulpfuncties.go)
```go
package hulpfuncties
// Exporteer alle functies via dit pakket
// De individuele bestanden bevatten de implementaties
```
## Gebruik in andere projecten
### 1. Installeer het pakket:
```bash
go mod init mijnproject
go get github.com/jouwgebruikersnaam/mijnhulppakket
```
### 2. Gebruik in je code:
```go
package main
import (
"fmt"
"log"
"github.com/jouwgebruikersnaam/mijnhulppakket/hulpfuncties"
)
type Gebruiker struct {
Naam string `json:"naam"`
Email string `json:"email"`
Leeftijd int `json:"leeftijd"`
}
func main() {
// String functies
tekst := "hallo wereld"
fmt.Println("Hoofdletters:", hulpfuncties.NaarHoofdletters(tekst))
fmt.Println("CamelCase:", hulpfuncties.NaarCamelCase(tekst))
// JSON functies
gebruiker := Gebruiker{
Naam: "Jan Jansen",
Email: "jan@voorbeeld.nl",
Leeftijd: 30,
}
// Converteer naar JSON
jsonData, err := hulpfuncties.NaarJSONIndent(gebruiker)
if err != nil {
log.Fatal(err)
}
fmt.Println("JSON:", jsonData)
// Parse JSON terug
var nieuweGebruiker Gebruiker
err = hulpfuncties.ParseJSON([]byte(jsonData), &nieuweGebruiker)
if err != nil {
log.Fatal(err)
}
fmt.Println("Geparseerde gebruiker:", nieuweGebruiker)
}
```
## Go.mod voor gebruik:
```go
module mijnproject
go 1.21
require github.com/jouwgebruikersnaam/mijnhulppakket v0.1.0
```
## Best practices:
1. **Documentatie**: Voeg comments toe boven elke functie
2. **Error handling**: Return altijd errors waar nodig
3. **Testing**: Maak testbestanden (`_test.go`)
4. **Versiebeheer**: Gebruik semantische versionering
5. **Dependencies**: Houd dependencies minimaal
## Voorbeeld test (stringutils_test.go):
```go
package hulpfuncties
import "testing"
func TestNaarHoofdletters(t *testing.T) {
result := NaarHoofdletters("hallo")
if result != "HALLO" {
t.Errorf("Verwacht 'HALLO', kreeg '%s'", result)
}
}
```
Dit pakket kan je nu eenvoudig hergebruiken in al je Go-projecten!