文章摘要: node.TraverseFunc(func(node *Node) {root.TraverseFunc(func(node *tree.Node) {
本節重點
1)GO安裝路徑為為GOROOT 如何設定GOPATH 在PATH中新增GOPATH/bin目錄
2)GOPATH目錄(這裏為/home/admin/go)下有三個資料夾bin pkg src但是一般是src是我自己建立,其餘不是
如果非要建立這幾個資料夾,比如建立了pkg就涉及到IDEA中go run 時候可能go install會被拒絕寫入由我自己建立的pkg
3)IDEA工程儲存路徑(這裏為 /home/admin/go/src/learngo)我自己注意:最好下次儲存為 /home/admin/go/src/ycx/learngo
4)無法直接獲取golang的包因此使用工作gopm(獲取時候採用go get命令 但是一定要記得安裝了git)
5)IDEA中執行某個程式時候如果報錯(請自行檢視是否到該包目錄下go install了,如果沒有會報錯關於linux_amd64的)
6)GPATH下:go build來編譯 go install產生pkg檔案和可執行檔案 go run直接編譯執行
GOPATH
[[email protected] ~]$ cd /opt/go
[[email protected] go]$ pwd
/opt/go
[[email protected] go]$ echo $GOPATH
/home/admin/go
[[email protected] go]$ gedit /etc/profile
GOPATH
重點關注:GOPATH以及設定PATH關於GOPATH的
go get
在配置的GOPATH目錄下執行命令:go get -v github.com/gpmgo/gopm
注意1:如果不能執行請檢視自己是否安裝了 git 。
注意:如果出現錯誤提示如下(請將src目錄下的github.com資料夾刪除使用命令為:rm -rf 資料夾名字
安裝gopm完畢檢視目錄下一些檔案:(此時說明gopm安裝完畢,可以通過檢視gopm的help來執行了)
[[email protected] go]# gopm help
[[email protected] go]# gopm help get
使用gopm:
使用一下命令第一次不會出現一下問題
開啟IDEA可以檢視GOPATH已經出現:
執行go build命令來build需要的goimports將其裝在bin目錄下面去
注:這裏它會做兩件事情(第一件:將IDEA裡的import兩個空行 第二件:是在golang.org 的x目錄下多很多東西)
使用示例
我們可以來使用一下:使用intsets.Sparse 下面是tree的總程式碼
注意:執行程式treeentry.go執行程式出錯:(這是由於自己認為建立了pkg,如果不是則不會報這個錯誤)
解決辦法:
tree
目錄結構:
package main
import (
"fmt"
"learngo/tree"
"golang.org/x/tools/container/intsets"
)
type myTreeNode struct
node *tree.Node
func (myNode *myTreeNode) postOrder()
func testSparse()
s := intsets.Sparse
s.Insert(1)
s.Insert(1000)
s.Insert(1000000)
fmt.Println(s.Has(1000))
fmt.Println(s.Has(10000000))
func main()
var root tree.Node
root = tree.NodeValue: 3
root.Left = &tree.Node
root.Right = &tree.Node5, nil, nil
root.Right.Left = new(tree.Node)
root.Left.Right = tree.CreateNode(2)
root.Right.Left.SetValue(4)
fmt.Print("In-order traversal: ")
root.Traverse()
fmt.Print("My own post-order traversal: ")
myRoot := myTreeNode&root
myRoot.postOrder()
fmt.Println()
nodeCount := 0
root.TraverseFunc(func(node *tree.Node)
nodeCount++
)
fmt.Println("Node count:", nodeCount)
c := root.TraverseWithChannel()
maxNodeValue := 0
for node := range c
if node.Value > maxNodeValue
maxNodeValue = node.Value
fmt.Println("Max node value:", maxNodeValue)
testSparse()
entry.go
package tree
import "fmt"
type Node struct
Value int
Left, Right *Node
func (node Node) Print()
fmt.Print(node.Value, " ")
func (node *Node) SetValue(value int)
if node == nil
fmt.Println("Setting Value to nil " +
"node. Ignored.")
return
node.Value = value
func CreateNode(value int) *Node
return &NodeValue: value
node.go
package tree
import "fmt"
func (node *Node) Traverse()
node.TraverseFunc(func(n *Node)
n.Print()
)
fmt.Println()
func (node *Node) TraverseFunc(f func(*Node))
if node == nil
return
node.Left.TraverseFunc(f)
f(node)
node.Right.TraverseFunc(f)
func (node *Node) TraverseWithChannel() chan *Node
out := make(chan *Node)
go func()
node.TraverseFunc(func(node *Node)
out輸出是:
In-order traversal: 0 2 3 4 5
My own post-order traversal: 2 0 4 5 3
Node count: 5
Max node value: 5
true
false
Process finished with exit code 0queue
先做準備工作
程式碼結構如下:
package main
import (
"fmt"
"learngo/queue"
)
func main()
q := queue.Queue1
q.Push(2)
q.Push(3)
fmt.Println(q.Pop())
fmt.Println(q.Pop())
fmt.Println(q.IsEmpty())
fmt.Println(q.Pop())
fmt.Println(q.IsEmpty())
main.go
package queue
// A FIFO queue.
type Queue []int
// Pushes the element into the queue.
// e.g. q.Push(123)
func (q *Queue) Push(v int)
*q = append(*q, v)
// Pops element from head.
func (q *Queue) Pop() int
head := (*q)[0]
*q = (*q)[1:]
return head
// Returns if the queue is empty or not.
func (q *Queue) IsEmpty() bool
return len(*q) == 0
queue.go輸出是:
1
2
false
3
true
Process finished with exit code 0
package queue
import "fmt"
func ExampleQueue_Pop()
q := Queue1
q.Push(2)
q.Push(3)
fmt.Println(q.Pop())
fmt.Println(q.Pop())
fmt.Println(q.IsEmpty())
fmt.Println(q.Pop())
fmt.Println(q.IsEmpty())
// Output:
// 1
// 2
// false
// 3
// true
queue_test.go執行是:
http://www.buzzfunnews.com/20180725871.html
心情煩悶需要新鮮事刺激一下嗎?請上:http://www.buzzfunnews.com
沒有留言:
張貼留言