slogan3

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

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!