From 758ff64c69e34965f8af5b2d6ffd65e8d7ab2150 Mon Sep 17 00:00:00 2001 From: Ondřej Surý Date: Mon, 14 Feb 2011 13:23:51 +0100 Subject: Imported Upstream version 2011-02-01.1 --- doc/codelab/wiki/wiki.html | 56 +++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 28 deletions(-) (limited to 'doc/codelab/wiki/wiki.html') diff --git a/doc/codelab/wiki/wiki.html b/doc/codelab/wiki/wiki.html index 919385edf..ff2c3088b 100644 --- a/doc/codelab/wiki/wiki.html +++ b/doc/codelab/wiki/wiki.html @@ -71,27 +71,27 @@ declaration.

Let's start by defining the data structures. A wiki consists of a series of interconnected pages, each of which has a title and a body (the page content). -Here, we define page as a struct with two fields representing +Here, we define Page as a struct with two fields representing the title and body.

-!./srcextract.bin -src=part1.go -name=page
+!./srcextract.bin -src=part1.go -name=Page
 

The type []byte means "a byte slice". (See Effective Go for more on slices.) -The body element is a []byte rather than +The Body element is a []byte rather than string because that is the type expected by the io libraries we will use, as you'll see below.

-The page struct describes how page data will be stored in memory. +The Page struct describes how page data will be stored in memory. But what about persistent storage? We can address that by creating a -save method on page: +save method on Page:

@@ -100,13 +100,13 @@ But what about persistent storage? We can address that by creating a
 
 

This method's signature reads: "This is a method named save that -takes as its receiver p, a pointer to page . It takes +takes as its receiver p, a pointer to Page . It takes no parameters, and returns a value of type os.Error."

-This method will save the page's body to a text -file. For simplicity, we will use the title as the file name. +This method will save the Page's Body to a text +file. For simplicity, we will use the Title as the file name.

@@ -114,7 +114,7 @@ The save method returns an os.Error value because that is the return type of WriteFile (a standard library function that writes a byte slice to a file). The save method returns the error value, to let the application handle it should anything go wrong while -writing the file. If all goes well, page.save() will return +writing the file. If all goes well, Page.save() will return nil (the zero-value for pointers, interfaces, and some other types).

@@ -136,8 +136,8 @@ We will want to load pages, too:

The function loadPage constructs the file name from -title, reads the file's contents into a new -page, and returns a pointer to that new page. +Title, reads the file's contents into a new +Page, and returns a pointer to that new page.

@@ -151,7 +151,7 @@ error return value (in essence, assigning the value to nothing).

But what happens if ReadFile encounters an error? For example, the file might not exist. We should not ignore such errors. Let's modify the -function to return *page and os.Error. +function to return *Page and os.Error.

@@ -160,7 +160,7 @@ function to return *page and os.Error.
 
 

Callers of this function can now check the second parameter; if it is -nil then it has successfully loaded a page. If not, it will be an +nil then it has successfully loaded a Page. If not, it will be an os.Error that can be handled by the caller (see the os package documentation for details). @@ -179,7 +179,7 @@ written:

After compiling and executing this code, a file named TestPage.txt would be created, containing the contents of p1. The file would -then be read into the struct p2, and its body element +then be read into the struct p2, and its Body element printed to the screen.

@@ -334,7 +334,7 @@ href="http://localhost:8080/view/test">http://localhost:8080/view/test -

Editing pages

+

Editing Pages

A wiki is not a wiki without the ability to edit pages. Let's create two new @@ -353,7 +353,7 @@ First, we add them to main():

The function editHandler loads the page -(or, if it doesn't exist, create an empty page struct), +(or, if it doesn't exist, create an empty Page struct), and displays an HTML form.

@@ -413,15 +413,15 @@ The function template.ParseFile will read the contents of

The method t.Execute replaces all occurrences of -{title} and {body} with the values of -p.title and p.body, and writes the resultant +{Title} and {Body} with the values of +p.Title and p.Body, and writes the resultant HTML to the http.ResponseWriter.

-Note that we've used {body|html} in the above template. +Note that we've used {Body|html} in the above template. The |html part asks the template engine to pass the value -body through the html formatter before outputting it, +Body through the html formatter before outputting it, which escapes HTML characters (such as replacing > with >). This will prevent user data from corrupting the form HTML. @@ -472,8 +472,8 @@ The handlers are now shorter and simpler.

What if you visit /view/APageThatDoesntExist? The program will crash. This is because it ignores the error return value from -loadPage. Instead, if the requested page doesn't exist, it should -redirect the client to the edit page so the content may be created: +loadPage. Instead, if the requested Page doesn't exist, it should +redirect the client to the edit Page so the content may be created:

@@ -486,7 +486,7 @@ The http.Redirect function adds an HTTP status code of
 header to the HTTP response.
 

-

Saving pages

+

Saving Pages

The function saveHandler will handle the form submission. @@ -498,7 +498,7 @@ The function saveHandler will handle the form submission.

The page title (provided in the URL) and the form's only field, -body, are stored in a new page. +Body, are stored in a new Page. The save() method is then called to write the data to a file, and the client is redirected to the /view/ page.

@@ -506,7 +506,7 @@ and the client is redirected to the /view/ page.

The value returned by FormValue is of type string. We must convert that value to []byte before it will fit into -the page struct. We use []byte(body) to perform +the Page struct. We use []byte(body) to perform the conversion.

@@ -610,7 +610,7 @@ Then we can create a global variable to store our validation regexp:

-!./srcextract.bin -src=final-noclosure.go -name=titleValidator
+!./srcextract.bin -src=final-noclosure.go -name=TitleValidator
 

@@ -624,7 +624,7 @@ the expression compilation fails, while Compile returns an

Now, let's write a function that extracts the title string from the request -URL, and tests it against our titleValidator expression: +URL, and tests it against our TitleValidator expression:

@@ -708,7 +708,7 @@ The closure returned by makeHandler is a function that takes
 an http.ResponseWriter and http.Request (in other
 words, an http.HandlerFunc). 
 The closure extracts the title from the request path, and
-validates it with the titleValidator regexp. If the
+validates it with the TitleValidator regexp. If the
 title is invalid, an error will be written to the
 ResponseWriter using the http.NotFound function. 
 If the title is valid, the enclosed handler function
-- 
cgit v1.2.3