From 956f2b3ca5c33774fd70140d15a036e7d8545786 Mon Sep 17 00:00:00 2001 From: Robert Jeutter Date: Thu, 30 Dec 2021 20:34:53 +0100 Subject: [PATCH] import package project --- 2-importpackage/go.mod | 3 ++ 2-importpackage/hello.go | 11 ++++++ 2-importpackage/importpackage/reverse.go | 12 ++++++ 2-importpackage/readme.md | 50 ++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 2-importpackage/go.mod create mode 100644 2-importpackage/hello.go create mode 100644 2-importpackage/importpackage/reverse.go create mode 100644 2-importpackage/readme.md diff --git a/2-importpackage/go.mod b/2-importpackage/go.mod new file mode 100644 index 0000000..7b45b4b --- /dev/null +++ b/2-importpackage/go.mod @@ -0,0 +1,3 @@ +module example/user/importpackage + +go 1.17 diff --git a/2-importpackage/hello.go b/2-importpackage/hello.go new file mode 100644 index 0000000..8dc7f45 --- /dev/null +++ b/2-importpackage/hello.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" + + "example/user/importpackage/importpackage" +) + +func main() { + fmt.Println(importpackage.ReverseRunes("!oG ,olleH")) +} \ No newline at end of file diff --git a/2-importpackage/importpackage/reverse.go b/2-importpackage/importpackage/reverse.go new file mode 100644 index 0000000..743724a --- /dev/null +++ b/2-importpackage/importpackage/reverse.go @@ -0,0 +1,12 @@ +// Package importpackage implements additional functions to manipulate UTF-8 +// encoded strings, beyond what is provided in the standard "strings" package. +package importpackage + +// ReverseRunes returns its argument string reversed rune-wise left to right. +func ReverseRunes(s string) string { + r := []rune(s) + for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { + r[i], r[j] = r[j], r[i] + } + return string(r) +} \ No newline at end of file diff --git a/2-importpackage/readme.md b/2-importpackage/readme.md new file mode 100644 index 0000000..1390660 --- /dev/null +++ b/2-importpackage/readme.md @@ -0,0 +1,50 @@ +# Import package +write a `importpackage` package and use it from the hello program. + +Because the `ReverseRunes` function begins with an upper-case letter, it is exported and can be used in other packages that import the importpackage package. + +Test that the package compiles with go build: +```bash +# init project +mkdir 2-importpackage +cd 2-importpackage +go mod init example/user/importpackage +# create files +touch hello.go +mkdir importpackage +cd importpackage +nano reverse.go +> // Package importpackage implements additional functions to manipulate UTF-8 +> // encoded strings, beyond what is provided in the standard "strings" package. +package importpackage +> +> // ReverseRunes returns its argument string reversed rune-wise left to right. +> func ReverseRunes(s string) string { +> r := []rune(s) +> for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 { +> r[i], r[j] = r[j], r[i] +> } +> return string(r) +> } +go build +``` + +This won't produce an output file. Instead it saves the compiled package in the local build cache. + +After confirming that the importpackage package builds, use it from the `hello` program. +```bash +cd .. +nano hello.go +> package main +> +> import ( +> "fmt" +> +> "example/user/importpackage/importpackage" +> ) +> +> func main() { +> fmt.Println(importpackage.ReverseRunes("!oG ,olleH")) +> } +go run hello.go +```