收網部分會實作 把釣到的魚(帳號密碼)存起來,並且做一個簡單的 ui 查看成果 ,總共會分成三篇
為了把釣到的魚存起來我們需要一個資料庫,今天第一天要做的就是初始化並且連接到資料庫
說到資料庫大家應該都多少聽過 MySQL、MongoDB 之類的,但那些對我們來說都太肥大了,要使用都還要另外安裝,我們只需要一個小小的資料庫來存一些少量的資料,也不需要支援 Transaction 等等,所以這邊筆者我選用 LedisDB,他有幾個特性很適合這種小專案使用
LedisDB 本身就是 Go 寫的,他可以被嵌入(Embedded)在 Go 寫的程式裡面,不用像許多肥肥的資料庫要另外安裝,安裝完還要設定一堆有的沒的
為了要把很多筆帳號密碼存起來,我們需要一個 List(或者說 Array),剛好 LedisDB 也有提供這種資料結構
因為目前 main.go
已經有一百多行扣,如果再把讀取資料庫的扣寫在裡面會太肥,所以這邊要使用 subpackage 把 db 的功能拆分出來,就像寫 Nodejs 或 Python 也不可能把所有扣寫在一個檔案,要拆分成好幾個模組
原本的專案目錄長這樣,只有三個檔案
├── go.mod
├── go.sum
└── main.go
在 Go 裡面每個 package 都要有一個獨立的資料夾,所以現在要新增一個 db
作為這個 subpackage 的資料夾,裡面有一個 db.go
├── db
│ └── db.go
├── go.mod
├── go.sum
└── main.go
如果要在 main 使用寫在 db.go
內的 Connect
,那就要先 import "go-phishing/db"
再用 db.Connect()
,簡單明瞭
// ----- db.go -----
package db
func Connect() {
fmt.Println("connect")
}
// ----- main.go -----
import "go-phishing/db"
func main() {
db.Connect()
}
Connect
要負責建立跟資料庫的連線,然後把 db
存到全域變數供其他 function 使用,這部份的實作不用太仔細看,因為筆者我也只是照著他的文件寫XD,所以大概知道是在建立連線就可以了
// ----- db.go -----
import (
"log"
// 把 LedisDB import 進來
"github.com/siddontang/ledisdb/config"
"github.com/siddontang/ledisdb/ledis"
)
var db *ledis.DB
func Connect() {
// 建立一個設定檔,把資料的儲存位置設定到 ./db-data
cfg := config.NewConfigDefault()
cfg.DataDir = "./db_data"
// 要求建立連線
l, _ := ledis.Open(cfg)
_db, err := l.Select(0)
if err != nil {
panic(err)
}
// 成功建立連線,把 db 存到全域變數,之後其他地方會用到
db = _db
log.Println("Connect to db successfully")
}
接著在 main 中跑 db.Connect()
,有看到 log 就是成功連上 db 了
// ----- main.go -----
import (
// ...
"go-phishing/db"
)
func main() {
db.Connect()
// ...
}
這時候看看專案目錄會多一個 db_data
資料夾,LedisDB 把所有資料都存在這裡,如果想清空資料庫只要刪掉這個資料夾就可以了,很簡單吧~
├── db
│ └── db.go
├── db_data # <-- 這個
│ ├── LOCK
│ └── goleveldb_data
├── go.mod
├── go.sum
└── main.go
今天用 LedisDB 作為底層實作了 db.Connect
並且在 main 中使用,commit 放在這裡,對今天的內容有什麼問題都歡迎在底下提問,沒問題的話明天要來實作最重要的 讀/寫 資料庫部分了