Go入門-stackパッケージ

1955 ワード

1.独立したパケットを作成し、stackの実装のために適切なパケットを作成し、Push PopとStackタイプをエクスポートする必要がある.このパッケージのユニットテストを作成し、少なくともPush後のPopの動作をテストします.
stack-as-package.goファイル
package stack

type Stack struct {
	i 	 int
	data [10]int
}

func (s *Stack) Push(k int)  {
	s.data[s.i] = k
	s.i++
}

func (s *Stack) Pop() (ret int) {
		s.i--
		ret = s.data[s.i]
		return
}


pushpop_test.go
package stack

import "testing"

func TestPushPop(t *testing.T)  {
	c := new(Stack)
	c.Push(5)
	if c.Pop() != 5 {
		t.Log("Pop doesn't give 5")
		t.Fail()
	}
}

コマンドを順次実行
> mkdir $GOPATH/src/stack
> cp pushpop_test.go $GOPATH/src/stack
> cp stack-as-package.go  $GOPATH/src/stack
> go test stack
 
2、stackパッケージを使用して逆ポーランド計算機を作成する
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var reader *bufio.Reader = bufio.NewReader(os.Stdin)
var st = new(Stack)

type Stack struct {
	i int
	data [10]int
}

func (s *Stack) Push(k int)  {
	if s.i +1 >9 {
		return
	}
	s.data[s.i] = k
	s.i++
}

func (s *Stack) Pop() (ret int) {
	s.i--
	if s.i < 0 {
		s.i = 0
		return
	}
	ret = s.data[s.i]
	return
}

func main()  {
	for {
		s, err := reader.ReadString('
') var token string if err != nil { return } for _,c := range s { switch { case c > '0' && c < '9' : token = token + string(c) case c == ' ': r,_ := strconv.Atoi(token) st.Push(r) token = "" case c == '+': fmt.Printf("%d
",st.Pop() + st.Pop()) case c == '*': fmt.Printf("%d
",st.Pop() * st.Pop()) case c == '-': fmt.Printf("%d
",st.Pop() - st.Pop()) case c == 'q': return default: //error } } } }

プログラムに示すように、数値を入力してスペースを入力すると、スタックに書き込まれます.