aboutsummaryrefslogtreecommitdiff
path: root/_content/doc/tutorial/create-module.html
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2021-02-12 14:32:52 -0500
committerRuss Cox <rsc@golang.org>2021-02-16 02:04:17 +0000
commit6ba27a496a089d0971c137a1a0632a9a10a3be22 (patch)
tree5cd810465c7e333f8f1ebc793cee0193d2df17de /_content/doc/tutorial/create-module.html
parentaefff79d071efcd38761d4c1a722e42087b94856 (diff)
downloadgo-x-website-6ba27a496a089d0971c137a1a0632a9a10a3be22.tar.xz
_content: move content/static/* to _content/*
The extra level of hierarchy here is unnecessary and confusing. The directory is now _content so that any Go source files in our docs are not considered by commands like "go mod tidy" and "go test all". Change-Id: Ib6d7cb12920193798ee825155a8f8b33f16e60d8 Reviewed-on: https://go-review.googlesource.com/c/website/+/291691 Trust: Russ Cox <rsc@golang.org> Run-TryBot: Russ Cox <rsc@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@golang.org>
Diffstat (limited to '_content/doc/tutorial/create-module.html')
-rw-r--r--_content/doc/tutorial/create-module.html259
1 files changed, 259 insertions, 0 deletions
diff --git a/_content/doc/tutorial/create-module.html b/_content/doc/tutorial/create-module.html
new file mode 100644
index 00000000..44e0d832
--- /dev/null
+++ b/_content/doc/tutorial/create-module.html
@@ -0,0 +1,259 @@
+<!--{
+ "Title": "Tutorial: Create a Go module",
+ "Path": "/doc/tutorial/create-module"
+}-->
+
+<p>
+ This is the first part of a tutorial that introduces a few fundamental
+ features of the Go language. If you're just getting started with Go, be sure
+ to take a look at the
+ <a href="getting-started.html">getting started</a> tutorial, which introduces
+ the <code>go</code> command, Go modules, and very simple Go code.
+</p>
+
+<p>
+ In this tutorial you'll create two modules. The first is a library which is
+ intended to be imported by other libraries or applications. The second is a
+ caller application which will use the first.
+</p>
+
+<p>
+ This tutorial's sequence includes six brief topics that each illustrate a
+ different part of the language.
+</p>
+
+<ol>
+ <li>
+ Create a module -- Write a small module with functions you can call from
+ another module.
+ </li>
+ <li>
+ <a href="call-module-code.html">Call your code from another module</a> --
+ Import and use your new module.
+ </li>
+ <li>
+ <a href="handle-errors.html">Return and handle an error</a> -- Add simple
+ error handling.
+ </li>
+ <li>
+ <a href="random-greeting.html">Return a random greeting</a> -- Handle data
+ in slices (Go's dynamically-sized arrays).
+ </li>
+ <li>
+ <a href="greetings-multiple-people.html"
+ >Return greetings for multiple people</a
+ >
+ -- Store key/value pairs in a map.
+ </li>
+ <li>
+ <a href="add-a-test.html">Add a test</a> -- Use Go's built-in unit testing
+ features to test your code.
+ </li>
+ <li>
+ <a href="compile-install.html">Compile and install the application</a> --
+ Compile and install your code locally.
+ </li>
+</ol>
+
+<aside class="Note">
+ <strong>Note:</strong> For other tutorials, see
+ <a href="index.html">Tutorials</a>.
+</aside>
+
+<h2 id="prerequisites">Prerequisites</h2>
+
+<ul>
+ <li>
+ <strong>Some programming experience.</strong> The code here is pretty
+ simple, but it helps to know something about functions, loops, and arrays.
+ </li>
+ <li>
+ <strong>A tool to edit your code.</strong> Any text editor you have will
+ work fine. Most text editors have good support for Go. The most popular are
+ VSCode (free), GoLand (paid), and Vim (free).
+ </li>
+ <li>
+ <strong>A command terminal.</strong> Go works well using any terminal on
+ Linux and Mac, and on PowerShell or cmd in Windows.
+ </li>
+</ul>
+
+<h2 id="start">Start a module that others can use</h2>
+
+<p>
+ Start by creating a
+ <a href="https://golang.org/doc/code.html#Organization">Go module</a>. In a
+ module, you collect one or more related packages for a discrete and useful set
+ of functions. For example, you might create a module with packages that have
+ functions for doing financial analysis so that others writing financial
+ applications can use your work.
+</p>
+
+<p>
+ Go code is grouped into packages, and packages are grouped into modules. Your
+ package's module specifies the context Go needs to run the code, including the
+ Go version the code is written for and the set of other modules it requires.
+</p>
+
+<p>
+ As you add or improve functionality in your module, you publish new versions
+ of the module. Developers writing code that calls functions in your module can
+ import the module's updated packages and test with the new version before
+ putting it into production use.
+</p>
+
+<ol>
+ <li>
+ Open a command prompt and <code>cd</code> to your home directory.
+
+ <p>
+ On Linux or Mac:
+ </p>
+
+ <pre>
+cd
+</pre
+ >
+
+ <p>
+ On Windows:
+ </p>
+
+ <pre>
+cd %HOMEPATH%
+</pre
+ >
+ </li>
+
+ <li>
+ Create a <code>greetings</code> directory for your Go module source code.
+ This is where you'll write your module code.
+
+ <p>
+ For example, from your home directory use the following commands:
+ </p>
+
+ <pre>
+mkdir greetings
+cd greetings
+</pre
+ >
+ </li>
+
+ <li>
+ Start your module using the
+ <a
+ href="https://golang.org/cmd/go/#hdr-Initialize_new_module_in_current_directory"
+ ><code>go mod init</code> command</a
+ >
+ to create a go.mod file.
+
+ <p>
+ Run the <code>go mod init</code> command, giving it the path of the module
+ your code will be in. Here, use <code>example.com/greetings</code> for the
+ module path -- in production code, this would be the URL from which your
+ module can be downloaded.
+ </p>
+
+ <pre>
+$ go mod init example.com/greetings
+go: creating new go.mod: module example.com/greetings
+</pre
+ >
+
+ <p>
+ The <code>go mod init</code> command creates a go.mod file that identifies
+ your code as a module that might be used from other code. The file you
+ just created includes only the name of your module and the Go version your
+ code supports. But as you add dependencies -- meaning packages from other
+ modules -- the go.mod file will list the specific module versions to use.
+ This keeps builds reproducible and gives you direct control over which
+ module versions to use.
+ </p>
+ </li>
+
+ <li>
+ In your text editor, create a file in which to write your code and call it
+ greetings.go.
+ </li>
+
+ <li>
+ Paste the following code into your greetings.go file and save the file.
+
+ <pre>
+package greetings
+
+import "fmt"
+
+// Hello returns a greeting for the named person.
+func Hello(name string) string {
+ // Return a greeting that embeds the name in a message.
+ message := fmt.Sprintf("Hi, %v. Welcome!", name)
+ return message
+}
+</pre
+ >
+
+ <p>
+ This is the first code for your module. It returns a greeting to any
+ caller that asks for one. You'll write code that calls this function in
+ the next step.
+ </p>
+
+ <p>
+ In this code, you:
+ </p>
+
+ <ul>
+ <li>
+ Declare a <code>greetings</code> package to collect related functions.
+ </li>
+ <li>
+ Implement a <code>Hello</code> function to return the greeting.
+ <p>
+ This function takes a <code>name</code> parameter whose type is
+ <code>string</code>, and returns a <code>string</code>. In Go, a
+ function whose name starts with a capital letter can be called by a
+ function not in the same package. This is known in Go as an
+ <a href="https://tour.golang.org/basics/3"><em>exported</em> name</a>.
+ </p>
+ <img src="images/function-syntax.png" width="300px" />
+ </li>
+
+ <li>
+ Declare a <code>message</code> variable to hold your greeting.
+ <p>
+ In Go, the <code>:=</code> operator is a shortcut for declaring and
+ initializing a variable in one line (Go uses the value on the right to
+ determine the variable's type). Taking the long way, you might have
+ written this as:
+ </p>
+ <pre>
+var message string
+message = fmt.Sprintf("Hi, %v. Welcome!", name)
+</pre
+ >
+ </li>
+
+ <li>
+ Use the <code>fmt</code> package's <code>Sprintf</code> function to
+ create a greeting message. The first argument is a format string, and
+ <code>Sprintf</code> substitutes the <code>name</code> parameter's value
+ for the <code>%v</code> format verb. Inserting the value of the
+ <code>name</code> parameter completes the greeting text.
+ </li>
+ <li>Return the formatted greeting text to the caller.</li>
+ </ul>
+ </li>
+</ol>
+
+<p>
+ In the <a href="call-module-code.html">next step</a>, you'll call this
+ function from another module.
+</p>
+
+<p class="Navigation">
+ <a class="Navigation-next" href="call-module-code.html"
+ >Call your code from another module &gt;</a
+ >
+</p>