1. Sample for table pembelian
mkdir -p /opt/go-pembelian
cd /opt/go-pembelian
mkdir backend
cd backend
2. run mod & driver
cd backend
go mod init pembelian-api
go get github.com/go-sql-driver/mysql
[root@teguhth-all go-pembelian]# cd backend
[root@teguhth-all backend]# go mod init pembelian-api
go: creating new go.mod: module pembelian-api
[root@teguhth-all backend]# ls
go.mod
[root@teguhth-all backend]# go get github.com/go-sql-driver/mysql
go: downloading github.com/go-sql-driver/mysql v1.9.3
go: downloading filippo.io/edwards25519 v1.1.0
go: added filippo.io/edwards25519 v1.1.0
go: added github.com/go-sql-driver/mysql v1.9.3
[root@teguhth-all backend]# pwd
/opt/go-pembelian/backend
[root@teguhth-all backend]# ls
go.mod go.sum
[root@teguhth-all backend]#
3. run main_backupend.go
go run main_backupend.go
[root@teguhth-all backend]# pwd
/opt/go-pembelian/backend
[root@teguhth-all backend]# ls -l
total 16
-rw-r--r-- 1 root root 140 Feb 9 16:13 go.mod
-rw-r--r-- 1 root root 344 Feb 9 16:13 go.sum
-rw-r--r-- 1 root root 1111 Feb 9 16:50 main_backupend.go
-rw-r--r-- 1 root root 1009 Feb 9 16:49 main_backupendori.go
[root@teguhth-all backend]#
[root@teguhth-all backend]# go run main_backupend.go
2026/02/18 15:30:23 Backend jalan di :8080
4. access
### backend
curl http://10.10.10.90:8080/pembelian
http://10.10.10.90:8080/pembelian
### frontend
Daftar Pembelian Using Golang + php
http://10.10.10.90/indexgolang.html
Daftar Pembelian Using Golang + Lucee
http://10.10.10.90:8888/indexgolang.html
Daftar Pembelian Using Golang + Lucee noload
http://10.10.10.90:8888/indexgolang_noload.html
5. create backend golang
curl http://10.10.10.90:8080/pembelian
http://10.10.10.90:8080/pembelian
[root@teguhth-all backend]# pwd
/opt/go-pembelian/backend
[root@teguhth-all backend]# cat main_backupend.go
package main
import (
"database/sql"
"encoding/json"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
type Pembelian struct {
KP string `json:"kp"`
KB string `json:"kb"`
KC string `json:"kc"`
Tgl string `json:"tgl"`
Jml string `json:"jml"`
}
var db *sql.DB
func main() {
dsn := "admin:admin@tcp(10.10.10.90:3306)/teguhth"
var err error
db, err = sql.Open("mysql", dsn)
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/pembelian", getPembelian)
log.Println("Backend jalan di :8080")
http.ListenAndServe(":8080", nil)
}
func getPembelian(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Content-Type", "application/json")
rows, err := db.Query(`
SELECT
KODE_PEMBELIAN,
KODE_BARANG,
KODE_CUSTOMER,
TANGGAL_PEMBELIAN,
JUMLAH_PEMBELIAN
FROM pembelian`)
if err != nil {
w.Write([]byte(err.Error()))
return
}
defer rows.Close()
var list []Pembelian
for rows.Next() {
var p Pembelian
rows.Scan(&p.KP, &p.KB, &p.KC, &p.Tgl, &p.Jml)
list = append(list, p)
}
json.NewEncoder(w).Encode(list)
}
[root@teguhth-all backend]#
6. create frontend using php
### frontend
Daftar Pembelian Using Golang + php
http://10.10.10.90/indexgolang.html
[root@teguhth-all html]# pwd
/var/www/html
[root@teguhth-all html]# cat indexgolang.html
<!DOCTYPE html>
<html>
<head>
<title>Data Pembelian</title>
</head>
<body>
<h2>Daftar Pembelian Using Golang + php</h2>
<table border="1" id="tbl">
<tr>
<th>Kode Pembelian</th>
<th>Kode Barang</th>
<th>Kode Customer</th>
<th>Tanggal</th>
<th>Jumlah</th>
</tr>
</table>
<script>
fetch("http://10.10.10.90:8080/pembelian")
.then(r => r.json())
.then(data => {
let tbl = document.getElementById("tbl");
data.forEach(d => {
let row = tbl.insertRow();
row.insertCell().innerText = d.kp;
row.insertCell().innerText = d.kb;
row.insertCell().innerText = d.kc;
row.insertCell().innerText = d.tgl;
row.insertCell().innerText = d.jml;
});
});
</script>
</body>
</html>
[root@teguhth-all html]#
7. create frontend using lucee with load
### frontend
Daftar Pembelian Using Golang + Lucee
http://10.10.10.90:8888/indexgolang.html
[root@teguhth-all ROOT]# pwd
/opt/lucee/tomcat/webapps/ROOT
[root@teguhth-all ROOT]#
[root@teguhth-all ROOT]# cat indexgolang.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Data Pembelian (Go + Lucee)</title>
<style>
body {
font-family: Arial;
margin: 20px;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #444;
padding: 8px;
text-align: left;
}
th {
background: #eee;
}
</style>
</head>
<body>
<h2>Daftar Pembelian Using Golang + Lucee</h2>
<button onclick="loadData()">Load Data</button>
<br><br>
<table id="tbl">
<tr>
<th>Kode Pembelian</th>
<th>Kode Barang</th>
<th>Kode Customer</th>
<th>Tanggal</th>
<th>Jumlah</th>
</tr>
</table>
<script>
async function loadData() {
try {
let res = await fetch("http://10.10.10.90:8080/pembelian");
if (!res.ok) throw new Error("API error");
let data = await res.json();
let tbl = document.getElementById("tbl");
tbl.innerHTML = `
<tr>
<th>Kode Pembelian</th>
<th>Kode Barang</th>
<th>Kode Customer</th>
<th>Tanggal</th>
<th>Jumlah</th>
</tr>`;
data.forEach(d => {
let row = tbl.insertRow();
row.insertCell().innerText = d.kp;
row.insertCell().innerText = d.kb;
row.insertCell().innerText = d.kc;
row.insertCell().innerText = d.tgl;
row.insertCell().innerText = d.jml;
});
} catch (err) {
alert("Gagal load data: " + err);
}
}
</script>
</body>
</html>
[root@teguhth-all ROOT]#
8. create frontend using lucee with no load
### frontend
Daftar Pembelian Using Golang + Lucee noload
http://10.10.10.90:8888/indexgolang_noload.html
[root@teguhth-all ROOT]# pwd
/opt/lucee/tomcat/webapps/ROOT
[root@teguhth-all ROOT]#
[root@teguhth-all ROOT]# cat indexgolang_noload.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Data Pembelian (Go + Lucee)</title>
<style>
body {
font-family: Arial;
margin: 20px;
}
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid #444;
padding: 8px;
text-align: left;
}
th {
background: #eee;
}
</style>
</head>
<body>
<h2>Daftar Pembelian Using Golang + Lucee noload</h2>
<table id="tbl">
<tr>
<th>Kode Pembelian</th>
<th>Kode Barang</th>
<th>Kode Customer</th>
<th>Tanggal</th>
<th>Jumlah</th>
</tr>
</table>
<script>
async function loadData() {
try {
let res = await fetch("http://10.10.10.90:8080/pembelian");
if (!res.ok) throw new Error("API error");
let data = await res.json();
let tbl = document.getElementById("tbl");
data.forEach(d => {
let row = tbl.insertRow();
row.insertCell().innerText = d.kp;
row.insertCell().innerText = d.kb;
row.insertCell().innerText = d.kc;
row.insertCell().innerText = d.tgl;
row.insertCell().innerText = d.jml;
});
} catch (err) {
alert("Gagal load data: " + err);
}
}
// AUTO LOAD saat halaman dibuka
window.onload = loadData;
</script>
</body>
</html>
[root@teguhth-all ROOT]#








No comments:
Post a Comment