Golang テストコード (1)golangの中でSQL文を作る時に、てっとり早く数値の部分を文字列にする方法 (2)golangの可変長配列の作り方と、面倒くさい場所の値をひっぱり出す方法
package main
import (
"database/sql"
"fmt"
"log"
"math/rand"
_ "github.com/lib/pq"
)
func transfer_point(origin, destination int) (int, int) {
db, err := sql.Open("postgres", "user=postgres password=password host=localhost port=15432 dbname=utsu_tram_db3 sslmode=disable")
if err != nil {
log.Fatal("OpenError: ", err)
}
defer db.Close()
str := "SELECT seq, node, edge FROM pgr_dijkstra('SELECT gid as id, source, target, cost FROM ways'," + fmt.Sprint(origin) + "," + fmt.Sprint(destination) + ", directed:=false)"
rows, err := db.Query(str)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
var seq, node, edge int
var add_node_num = []int{}
for rows.Next() {
if err := rows.Scan(&seq, &node, &edge); err != nil {
fmt.Println(err)
}
if node > 0 && node < 70 {
add_node_num = append(add_node_num, node)
}
}
if len(add_node_num) >= 4 {
first_node := add_node_num[1]
last_node := add_node_num[len(add_node_num)-2]
if (first_node > 0 && first_node < 70) || (last_node > 0 && last_node < 70) {
return first_node, last_node
} else {
log.Fatal("wrong node:", err)
}
} else {
return -1, -1
}
return 0, 0
}
func main() {
fmt.Println(transfer_point(21509, 11215))
for i := 0; i < 100; i++ {
a := rand.Intn(30000)
b := rand.Intn(30000)
fmt.Println(a, b)
fmt.Println(transfer_point(rand.Intn(a), rand.Intn(b)))
}
}