godror 是一個很不錯的oracle golang 驅動,基於ODPI-C 編寫,好處是我們需要需要依賴編譯
我們只需要安裝oracle client 就可以了,不像go-oci8需要編譯,同時目前也有一個純golang 的
oracle驅動,但是目前還不是很穩定,以下是godror的參考使用
參考代碼
package main
import (
"database/sql"
"flag"
"fmt"
_ "github.com/godror/godror"
"log"
)
var (
username = flag.String("uname", "scott", "oracle username")
password = flag.String("password", "tiger", "oracle password")
oraclehost = flag.String("oraclehost", "dbhost", "oracle database host")
oracleport = flag.Int("oracleport", 1521, "oracle database port")
dbname = flag.String("dbname", "orclpdb1", "oracle database name")
)
func main() {
flag.Parse()
osqlInfo := fmt.Sprintf("%s/%s@%s:%d/%s", *username, *password, *oraclehost, *oracleport, *dbname)
db, err := sql.Open("godror", osqlInfo)
if err != nil {
log.Fatalf("connect oracle db error: %s:", err.Error())
}
rows, err := db.Query("select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') AS name from dual")
if err != nil {
fmt.Println("exec query error:", err.Error())
}
for rows.Next() {
var name string
rows.Scan(&name)
fmt.Println("fetch item:")
fmt.Println(name)
}
}
運行
go run main.go -uname <username> -password <password> -oraclehost <ip> -dbname <db>
docker 構建
使用了oracle 官方的linux 作為基礎鏡像
FROM golang:1.15-buster as build
WORKDIR /go/src/app
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.cn
COPY . .
RUN go build
FROM oraclelinux:7-slim
ARG release=19
ARG update=9
RUN yum -y install oracle-release-el7 && \
yum -y install oracle-instantclient${release}.${update}-basic && \
rm -rf /var/cache/yum
COPY --from=build /go/src/app/mygolang-oracle /mygolang-oracle
ENTRYPOINT [ "/mygolang-oracle" ]
說明
以上的docker 構建使用了多階段,使用oraclelinux進行運行,主要是簡單,而且內置了好多oracle 的依賴,不需要我們
進行多復雜的處理,sijms/go-ora 的golang純golang 代碼驅動是一個不錯的選擇,但是期待穩定
參考資料
https://github.com/rongfengliang/godror-golang-learning
https://godror.github.io/godror/doc/tuning.html#-query-performance
https://oracle.github.io/odpi/doc/installation.html#id10
https://github.com/godror/godror
https://hub.docker.com//oraclelinux
https://hub.docker.com//golang
https://github.com/sijms/go-ora