fix: coding style and file format for chapter 11, 12, 13, 14 and 15.

This commit is contained in:
Bo-Yi Wu
2017-02-11 12:32:16 +08:00
parent c5413075c1
commit 4abbfabb52
63 changed files with 2662 additions and 2622 deletions

View File

@@ -1,8 +1,8 @@
package main
import (
"fmt"
"./float64"
"fmt"
)
func main() {

View File

@@ -3,8 +3,8 @@ package main
import "fmt"
type Any interface {}
type Anything struct {}
type Any interface{}
type Anything struct{}
func main() {
any := getAny()
@@ -13,7 +13,7 @@ func main() {
} else {
fmt.Println("any is not nil")
}
/*
/*
// to get the inner value:
anything := any.(*Anything)
if anything == nil {
@@ -21,7 +21,7 @@ func main() {
} else {
fmt.Println("anything is not nil")
}
*/
*/
}
func getAny() Any {

View File

@@ -10,7 +10,8 @@ type Shaper interface {
Area() float32
}
type Shape struct {}
type Shape struct{}
func (sh Shape) Area() float32 {
return -1 // the shape is indetermined, so we return something impossible
}
@@ -49,11 +50,12 @@ func main() {
c := &Circle{2.5, s}
shapes := []Shaper{r, q, c, s}
fmt.Println("Looping through shapes for area ...")
for n, _ := range shapes {
for n := range shapes {
fmt.Println("Shape details: ", shapes[n])
fmt.Println("Area of this shape is: ", shapes[n].Area())
}
}
/* Output:
Looping through shapes for area ...
Shape details: {5 3}
@@ -65,4 +67,3 @@ Area of this shape is: 19.634954
Shape details: {}
Area of this shape is: -1
*/

View File

@@ -18,6 +18,7 @@ type AreaInterface interface {
type PeriInterface interface {
Perimeter() float32
}
func main() {
var areaIntf AreaInterface
var periIntf PeriInterface
@@ -47,5 +48,5 @@ func (sq *Square) Perimeter() float32 {
}
func (tr *Triangle) Area() float32 {
return 0.5 * tr.base*tr.height
return 0.5 * tr.base * tr.height
}

View File

@@ -41,11 +41,12 @@ func main() {
fmt.Println("Looping through shapes for area ...")
// shapes := []Shaper{Shaper(r), Shaper(q), Shaper(c)}
shapes := []Shaper{r, q, c}
for n, _ := range shapes {
for n := range shapes {
fmt.Println("Shape details: ", shapes[n])
fmt.Println("Area of this shape is: ", shapes[n].Area())
}
}
/* Output:
Looping through shapes for area ...
Shape details: {5 3}

View File

@@ -2,8 +2,8 @@
package main
import (
"fmt"
"./stack/stack"
"fmt"
)
var st1 stack.Stack
@@ -21,6 +21,7 @@ func main() {
fmt.Println(item)
}
}
/* Output:
[Java C++ Python C# Ruby]
100

View File

@@ -30,7 +30,7 @@ func main() {
}
}
func mapFunc(mf func(obj) obj, list []obj) ([]obj) {
func mapFunc(mf func(obj) obj, list []obj) []obj {
result := make([]obj, len(list))
for ix, v := range list {
@@ -45,6 +45,7 @@ func mapFunc(mf func(obj) obj, list []obj) ([]obj) {
*/
return result
}
/* Output:
0
2

View File

@@ -27,7 +27,7 @@ func main() {
}
}
func mapFunc(mf func(obj) obj, list ...obj) ([]obj) {
func mapFunc(mf func(obj) obj, list ...obj) []obj {
result := make([]obj, len(list))
for ix, v := range list {
@@ -42,6 +42,7 @@ func mapFunc(mf func(obj) obj, list ...obj) ([]obj) {
*/
return result
}
/* Output:
0
2

View File

@@ -9,7 +9,7 @@ type Miner interface {
func Min(data Miner) interface{} {
min := data.ElemIx(0)
for i:=1; i < data.Len(); i++ {
for i := 1; i < data.Len(); i++ {
if data.Less(i, i-1) {
min = data.ElemIx(i)
}
@@ -18,11 +18,13 @@ func Min(data Miner) interface{} {
}
type IntArray []int
func (p IntArray) Len() int { return len(p) }
func (p IntArray) ElemIx(ix int) interface{} { return p[ix] }
func (p IntArray) Less(i, j int) bool { return p[i] < p[j] }
type StringArray []string
func (p StringArray) Len() int { return len(p) }
func (p StringArray) ElemIx(ix int) interface{} { return p[ix] }
func (p StringArray) Less(i, j int) bool { return p[i] < p[j] }

View File

@@ -2,8 +2,8 @@
package main
import (
"fmt"
"./min"
"fmt"
)
func ints() {

View File

@@ -46,13 +46,13 @@ func main() {
m = p1 // p1 is type *Point, has method Abs()
fmt.Printf("The length of the vector p1 is: %f\n", m.Abs())
p2:= &Point{4, 5}
p2 := &Point{4, 5}
m = p2
fmt.Printf("The length of the vector p2 is: %f\n", m.Abs() )
fmt.Printf("The length of the vector p2 is: %f\n", m.Abs())
p1.Scale(5)
m = p1
fmt.Printf("The length of the vector p1 after scaling is: %f\n", m.Abs() )
fmt.Printf("The length of the vector p1 after scaling is: %f\n", m.Abs())
fmt.Printf("Point p1 after scaling has the following coordinates: X %f - Y %f\n", p1.X, p1.Y)
mag := m.Abs()
@@ -60,8 +60,9 @@ func main() {
mag += m.Abs()
m = Polar{2.0, math.Pi / 2}
mag += m.Abs()
fmt.Printf("The float64 mag is now: %f", mag )
fmt.Printf("The float64 mag is now: %f", mag)
}
/* Output:
The length of the vector p1 is: 5.000000
The length of the vector p2 is: 6.403124

View File

@@ -13,7 +13,7 @@ type Stringer interface {
type Celsius float64
func (c Celsius) String() string {
return strconv.FormatFloat(float64(c),'f', 1, 64) + " °C"
return strconv.FormatFloat(float64(c), 'f', 1, 64) + " °C"
}
type Day int
@@ -26,13 +26,19 @@ func (day Day) String() string {
func print(args ...interface{}) {
for i, arg := range args {
if i > 0 {os.Stdout.WriteString(" ")}
if i > 0 {
os.Stdout.WriteString(" ")
}
switch a := arg.(type) { // type switch
case Stringer: os.Stdout.WriteString(a.String())
case int: os.Stdout.WriteString(strconv.Itoa(a))
case string: os.Stdout.WriteString(a)
case Stringer:
os.Stdout.WriteString(a.String())
case int:
os.Stdout.WriteString(strconv.Itoa(a))
case string:
os.Stdout.WriteString(a)
// more types
default: os.Stdout.WriteString("???")
default:
os.Stdout.WriteString("???")
}
}
}
@@ -40,4 +46,5 @@ func print(args ...interface{}) {
func main() {
print(Day(1), "was", Celsius(18.36)) // Tuesday was 18.4 °C
}
// Tuesday was 18.4 °C

View File

@@ -31,4 +31,5 @@ func main() {
var s Simple
fmt.Println(fI(&s)) // &s is required because Get() is defined with a receiver type pointer
}
// Output: 5

View File

@@ -55,6 +55,7 @@ func main() {
var r RSimple
fmt.Println(fI(&r))
}
/* Output:
5
50

View File

@@ -49,7 +49,6 @@ func fI(it Simpler) int {
return 0
}
func gI(any interface{}) int {
// return any.(Simpler).Get() // unsafe, runtime panic possible
if v, ok := any.(Simpler); ok {
@@ -57,6 +56,7 @@ func gI(any interface{}) int {
}
return 0 // default value
}
/* Output:
6
60
@@ -65,9 +65,10 @@ func gI(any interface{}) int {
func main() {
var s Simple = Simple{6}
fmt.Println(gI(&s)) // &s is required because Get() is defined with a receiver type pointer
var r RSimple = RSimple{60,60}
var r RSimple = RSimple{60, 60}
fmt.Println(gI(&r))
}
/* Output:
6
60

View File

@@ -20,8 +20,8 @@ func Sort(Sorter Interface) {
*/
func Sort(data Sorter) {
for pass:=1; pass < data.Len(); pass++ {
for i:=0; i < data.Len() - pass; i++ {
for pass := 1; pass < data.Len(); pass++ {
for i := 0; i < data.Len()-pass; i++ {
if data.Less(i+1, i) {
data.Swap(i, i+1)
}

View File

@@ -2,8 +2,8 @@
package main
import (
"fmt"
"./sort"
"fmt"
)
type Person struct {
@@ -26,10 +26,10 @@ func (p Persons) Swap(i, j int) {
}
func main() {
p1 := Person{"Xavier","Papadopoulos"}
p2 := Person{"Chris","Naegels"}
p3 := Person{"John","Doe"}
arrP := Persons{p1,p2,p3}
p1 := Person{"Xavier", "Papadopoulos"}
p2 := Person{"Chris", "Naegels"}
p3 := Person{"John", "Doe"}
arrP := Persons{p1, p2, p3}
fmt.Printf("Before sorting: %v\n", arrP)
sort.Sort(arrP)
fmt.Printf("After sorting: %v\n", arrP)

View File

@@ -4,11 +4,11 @@
package main
import (
"fmt"
"strconv"
"bufio"
"os"
"./stack/stack"
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
@@ -21,7 +21,7 @@ func main() {
fmt.Println("Input error !")
os.Exit(1)
}
token = token[0:len(token)-2] // remove "\r\n"
token = token[0 : len(token)-2] // remove "\r\n"
// fmt.Printf("--%s--\n",token) // debug statement
switch {
case token == "q": // stop als invoer = "q"
@@ -33,21 +33,21 @@ func main() {
case token == "+":
q, _ := calc1.Pop()
p, _ := calc1.Pop()
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int) + q.(int))
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int)+q.(int))
case token == "-":
q, _ := calc1.Pop()
p, _ := calc1.Pop()
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int) - q.(int))
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int)-q.(int))
case token == "*":
q, _ := calc1.Pop()
p, _ := calc1.Pop()
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int) * q.(int))
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int)*q.(int))
case token == "/":
q, _ := calc1.Pop()
p, _ := calc1.Pop()
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int) / q.(int))
fmt.Printf("The result of %d %s %d = %d\n", p, token, q, p.(int)/q.(int))
default:
fmt.Println("No valid input")
}

View File

@@ -1,11 +1,11 @@
package main
import (
"os"
"io"
"fmt"
"bufio"
"flag"
"fmt"
"io"
"os"
)
var numberFlag = flag.Bool("n", false, "number each line")

View File

@@ -3,8 +3,8 @@ package main
import (
"bufio"
"fmt"
"encoding/gob"
"fmt"
"log"
"os"
)
@@ -37,5 +37,6 @@ func main() {
}
fmt.Println(vc)
}
// Output:
// {Jan Kersschot [0x12642e60 0x12642e80] none}

View File

@@ -2,8 +2,8 @@
package main
import (
"fmt";
"crypto/md5"
"fmt"
"io"
)
@@ -14,6 +14,7 @@ func main() {
fmt.Printf("Result: %x\n", hasher.Sum(b))
fmt.Printf("Result: %d\n", hasher.Sum(b))
}
/* Output:
Result: 098f6bcd4621d373cade4e832627b4f6
Result: [9 143 107 205 70 33 211 115 202 222 78 131 38 39 180 246]

View File

@@ -4,8 +4,8 @@ package main
import (
"bufio"
"fmt"
"log"
"io"
"log"
"os"
"strconv"
"strings"
@@ -40,12 +40,12 @@ func main() {
book := new(Book)
book.title = strSl[0]
book.price, err = strconv.ParseFloat(strSl[1], 32)
if err!=nil {
if err != nil {
fmt.Printf("Error in file: %v", err)
}
//fmt.Printf("The quan was:-%s-", strSl[2])
book.quantity, err = strconv.Atoi(strSl[2])
if err!=nil {
if err != nil {
fmt.Printf("Error in file: %v", err)
}
if bks[0].title == "" {
@@ -59,6 +59,7 @@ func main() {
fmt.Println(bk)
}
}
/* Output:
We have read the following books from the file:
{"The ABC of Go" 25.5 1500}

View File

@@ -2,9 +2,9 @@
package main
import (
"bufio"
"fmt"
"io"
"bufio"
"os"
)
@@ -27,7 +27,7 @@ func main() {
//fmt.Printf("The output was: --%s--", outputString)
_, err := outputWriter.WriteString(outputString)
//fmt.Printf("Number of bytes written %d\n", n)
if (err != nil) {
if err != nil {
fmt.Println(err)
return
}

View File

@@ -2,6 +2,7 @@
package stack
import "strconv"
const LIMIT = 10
type Stack struct {
@@ -10,7 +11,7 @@ type Stack struct {
}
func (st *Stack) Push(n int) {
if (st.ix + 1 > LIMIT) {
if st.ix+1 > LIMIT {
return // stack is full!
}
st.data[st.ix] = n
@@ -24,9 +25,8 @@ func (st *Stack) Pop() int {
func (st Stack) String() string {
str := ""
for ix:=0; ix<st.ix; ix++ {
for ix := 0; ix < st.ix; ix++ {
str += "[" + strconv.Itoa(ix) + ":" + strconv.Itoa(st.data[ix]) + "] "
}
return str
}

View File

@@ -33,6 +33,7 @@ func main() {
new_page.load("Page.md")
fmt.Println(string(new_page.Body))
}
/* Output:
* # Page
* ## Section1

View File

@@ -2,11 +2,12 @@
package main
import (
"fmt"
"bufio"
"fmt"
"os"
"strings"
)
var nrchars, nrwords, nrlines int
func main() {

View File

@@ -28,6 +28,7 @@ func g(i int) {
fmt.Println("Printing in g", i)
g(i + 1)
}
/* Output:
Calling g.
Printing in g 0

View File

@@ -8,14 +8,14 @@ import (
func main() {
l := int64(15000)
if i, err := IntFromInt64(l); err!= nil {
if i, err := IntFromInt64(l); err != nil {
fmt.Printf("The conversion of %d to an int32 resulted in an error: %s", l, err.Error())
} else {
fmt.Printf("%d converted to an int32 is %d", l, i)
}
fmt.Println()
l = int64(math.MaxInt32 + 15000)
if i, err := IntFromInt64(l); err!= nil {
if i, err := IntFromInt64(l); err != nil {
fmt.Printf("The conversion of %d to an int32 resulted in an error: %s", l, err.Error())
} else {
fmt.Printf("%d converted to an int32 is %d", l, i)
@@ -38,6 +38,7 @@ func IntFromInt64(l int64) (i int, err error) {
i = ConvertInt64ToInt(l)
return i, nil
}
/* Output:
15000 converted to an int32 is 15000
The conversion of 2147498647 to an int32 resulted in an error: 2147498647 is out of the int32 range

View File

@@ -14,19 +14,20 @@ func badCall() {
func test() {
defer func() {
if e := recover(); e != nil {
fmt.Printf("Panicing %s\r\n", e);
fmt.Printf("Panicing %s\r\n", e)
}
}()
badCall()
fmt.Printf("After bad call\r\n");
fmt.Printf("After bad call\r\n")
}
func main() {
fmt.Printf("Calling test\r\n");
fmt.Printf("Calling test\r\n")
test()
fmt.Printf("Test completed\r\n");
fmt.Printf("Test completed\r\n")
}
/* Output:
Calling test
Panicing runtime error: integer divide by zero

View File

@@ -8,22 +8,22 @@ type ReverseTest struct {
in, out string
}
var ReverseTests = []ReverseTest {
ReverseTest{"ABCD", "DCBA"},
ReverseTest{"CVO-AZ", "ZA-OVC"},
ReverseTest{"Hello 世界", "界世 olleH"},
var ReverseTests = []ReverseTest{
{"ABCD", "DCBA"},
{"CVO-AZ", "ZA-OVC"},
{"Hello 世界", "界世 olleH"},
}
func TestReverse(t *testing.T) {
/*
/*
in := "CVO-AZ"
out := Reverse(in)
exp := "ZA-OVC"
if out != exp {
t.Errorf("Reverse of %s expects %s, but got %s", in, exp, out)
}
*/
// testing with a battery of testdata:
*/
// testing with a battery of testdata:
for _, r := range ReverseTests {
exp := strev.Reverse(r.in)
if r.out != exp {
@@ -34,7 +34,7 @@ func TestReverse(t *testing.T) {
func BenchmarkReverse(b *testing.B) {
s := "ABCD"
for i:=0; i < b.N; i++ {
for i := 0; i < b.N; i++ {
strev.Reverse(s)
}
}

View File

@@ -14,6 +14,7 @@ func main() {
c <- 10
fmt.Println("sent", 10)
}
/* Output:
sending 10
(15 s later):

View File

@@ -14,6 +14,7 @@ func main() {
c <- 10
fmt.Println("sent", 10)
}
/* Output:
sending 10
sent 10 // prints immediately

View File

@@ -39,6 +39,7 @@ func CalculatePi(n int) float64 {
func term(ch chan float64, k float64) {
ch <- 4 * math.Pow(-1, k) / (2*k + 1)
}
/* Output:
3.14179261359579
The calculation took this amount of time: 0.028002

View File

@@ -39,6 +39,7 @@ func term(ch chan float64, start, end int) {
}
ch <- result
}
/* Output:
3.1413926535917938
The calculation took this amount of time: 0.002000

View File

@@ -45,6 +45,7 @@ func BuildLazyUInt64Evaluator(evalFunc EvalFunc, initState Any) func() uint64 {
return ef().(uint64)
}
}
/* Output:
Fib nr 0: 0
Fib nr 1: 1

View File

@@ -3,8 +3,8 @@ package main
import (
"fmt"
"time"
"os"
"time"
)
func main() {

View File

@@ -21,6 +21,7 @@ func main() {
fmt.Println(i)
}
}
/* Output:
1
1

View File

@@ -27,6 +27,7 @@ func main() {
}()
fibonacci(c, quit)
}
/* Output:
1
1

View File

@@ -6,7 +6,7 @@ import (
)
func tel(ch chan int) {
for i:=0; i < 15; i++ {
for i := 0; i < 15; i++ {
ch <- i
}
close(ch) // if this is ommitted: panic: all goroutines are asleep - deadlock!
@@ -19,7 +19,7 @@ func main() {
go tel(ch)
for ok {
if i, ok= <-ch; ok {
if i, ok = <-ch; ok {
fmt.Printf("ok is %t and the counter is at %d\n", ok, i)
}
}

View File

@@ -7,7 +7,7 @@ import (
)
func tel(ch chan int, quit chan bool) {
for i:=0; i < 15; i++ {
for i := 0; i < 15; i++ {
ch <- i
}
quit <- true
@@ -21,11 +21,10 @@ func main() {
go tel(ch, quit)
for ok {
select {
case i:= <-ch:
case i := <-ch:
fmt.Printf("The counter is at %d\n", i)
case <-quit:
os.Exit(0)
}
}
}

View File

@@ -52,6 +52,7 @@ func main() {
quit <- true
fmt.Print("done")
}
/* output:
3+4=7 150+250=400
done

View File

@@ -92,6 +92,7 @@ func floatsForStrings(numbers []string) ([]float64, error) {
}
return floats, nil
}
/* Output:
Enter a radius and an angle (in degrees), e.g., 12.5 90, or Ctrl+Z, Enter to qui
t.

View File

@@ -28,6 +28,7 @@ func main() {
<-done
}
/* Output:
0
10

View File

@@ -26,4 +26,5 @@ func main() {
go consume()
<-done
}
// Output: 0 1 2 3 4 5 6 7 8 9

View File

@@ -1,10 +1,10 @@
package main
import (
"fmt"
"os"
"net"
"bufio"
"fmt"
"net"
"os"
"strings"
)

View File

@@ -14,6 +14,7 @@ func (h Hello) ServeHTTP(w http.ResponseWriter, r *http.Request) {
func main() {
var h Hello
http.ListenAndServe("localhost:4000",h)
http.ListenAndServe("localhost:4000", h)
}
// Output in browser-window with url http://localhost:4000: Hello!

View File

@@ -4,9 +4,9 @@ package main
import (
"bufio"
"fmt"
"net/http"
"io/ioutil"
"log"
"net/http"
"os"
"strings"
)
@@ -15,7 +15,7 @@ func main() {
fmt.Print("Give the url from which to read: ")
iread := bufio.NewReader(os.Stdin)
url, _ := iread.ReadString('\n')
url = strings.Trim(url," \n\r") // trimming space,etc.
url = strings.Trim(url, " \n\r") // trimming space,etc.
// fmt.Println("***", url,"***") // debugging
res, err := http.Get(url)
CheckError(err)

View File

@@ -2,8 +2,8 @@ package main
import (
"fmt"
"os"
"net"
"os"
"strings"
)
@@ -48,7 +48,7 @@ func doServerStuff(conn net.Conn) {
}
// extract clientname:
ix := strings.Index(input, "says")
clName := input[0:ix-1]
clName := input[0 : ix-1]
//fmt.Printf("The clientname is ---%s---\n", string(clName))
// set clientname active in mapUsers:
mapUsers[string(clName)] = 1

View File

@@ -3,11 +3,11 @@ package main
import (
"fmt"
"log"
"net/http"
"sort"
"strings"
"strconv"
"log"
"strings"
)
type statistics struct {
@@ -91,7 +91,7 @@ func sum(numbers []float64) (total float64) {
}
func median(numbers []float64) float64 {
middle := len(numbers)/2
middle := len(numbers) / 2
result := numbers[middle]
if len(numbers)%2 == 0 {
result = (result + numbers[middle-1]) / 2

View File

@@ -2,9 +2,9 @@
package main
import (
"text/template"
"fmt"
"log"
"text/template"
)
func main() {
@@ -22,6 +22,7 @@ func main() {
fmt.Println("The next one ought to fail.")
template.Must(tErr.Parse(" some static text {{ .Name }"))
}
/* Output:
The first one parsed OK.
The next one ought to fail.

View File

@@ -2,10 +2,10 @@
package main
import (
"net/http"
"fmt"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type Status struct {
@@ -18,7 +18,7 @@ type User struct {
func main() {
/* perform an HTTP request for the twitter status of user: Googland */
res, _:= http.Get("http://twitter.com/users/Googland.json")
res, _ := http.Get("http://twitter.com/users/Googland.json")
/* initialize the structure of the JSON response */
user := User{Status{""}}
/* unmarshal the JSON into our structures */
@@ -27,6 +27,7 @@ func main() {
json.Unmarshal(body, &user)
fmt.Printf("status: %s", user.Status.Text)
}
/* Output:
status: Robot cars invade California, on orders from Google:
Google has been testing self-driving cars ... http://bit.ly/cbtpUN http://retwt.me/97p

View File

@@ -2,8 +2,8 @@
package main
import (
"net/http"
"fmt"
"net/http"
"strings"
)