Go言語とSQLiteでランダムの顧客10人の注文をランダムの金額1000~10000の範囲で10000件登録してみる。

まず下記のコードを記載する。

package main

import (
	"database/sql"
	"fmt"
	"log"
	"math/rand"
	"strconv"
	"time"

	_ "github.com/mattn/go-sqlite3"(//自動入力されないので、手打ちで入力する)
)

func main() {
	db, err := sql.Open("sqlite3", "sample.db")
	if err != nil {
		log.Fatal(err)
	}
	a := `CREATE TABLE orders(
		id INTEGER PRIMARY KEY AUTOINCREMENT,
		user_id INTEGER,
		price INTEGER
		);`

	_, err := db.Exec(a)
	if err != nil {
		//log.Fatal(err)
	}
	
	var t string
	var k string
	for i := 0; i < 10000; i++ {
		rand.Seed(time.Now().UnixNano())
		user_id := rand.Intn(9) + 1
		t = strconv.Itoa(user_id)

		price := rand.Intn(9000) + 1000
		k = strconv.Itoa(price)

		s := "INSERT INTO orders(user_id, price) VALUES('" + t + "','" + k + "')"

		_, err = db.Exec(s)
		if err != nil {
			log.Fatal(err)
		}
	}
}

CREATE TABLE ordersでid,user_id,priceが入ったtableを作成する。

次にランダムのuser_idと金額を作成する。ランダムは、rand.Seed(time.Now().UnixNano())とrand.Intn()の組み合わせで用いる。rand.Intn()の中の()には、ランダムにしたい数字を入れる。今回のuser_idは1~10まで表示したいので、引数を9として、0~9のuser_idがランダムに表示されるようにし、+1をすることで、1~10のuser_idが表示されることになる。

strconv.Itoa()は、数字を文字列に変換する。

"INSERT INTO ordersでuser_idとpriceの値をtableに挿入する。この時、tとkを変数としての文字列と認識させるために、" + t + "、" + k + "とする。

res, err = db.Exec(s)で、ランダムの変数t,kを挿入するsを実行する。今回は、10000件登録するので、ランダムに変数を作成して挿入するまでをforの繰り返しでう。

この時、変数tとkをforの外で囲わないとエラーが発生する。