<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Benita Clarissa</title>
    <description>The latest articles on Forem by Benita Clarissa (@benitaclarissa).</description>
    <link>https://forem.com/benitaclarissa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F707014%2F39bcaccd-7113-42a1-88c8-2e0894145644.png</url>
      <title>Forem: Benita Clarissa</title>
      <link>https://forem.com/benitaclarissa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/benitaclarissa"/>
    <language>en</language>
    <item>
      <title>Implementasi SSE pada Golang (Backend)</title>
      <dc:creator>Benita Clarissa</dc:creator>
      <pubDate>Wed, 01 Dec 2021 04:34:20 +0000</pubDate>
      <link>https://forem.com/benitaclarissa/implementasi-sse-pada-golang-backend-15g5</link>
      <guid>https://forem.com/benitaclarissa/implementasi-sse-pada-golang-backend-15g5</guid>
      <description>&lt;p&gt;Pada kali ini, kita akan menggunakan package &lt;a href="https://github.com/alexandrevicenzi/go-sse"&gt;go-sse&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Untuk install package tersebut, silakan eksekusi instruksi berikut pada terminal/command prompt.&lt;br&gt;
&lt;code&gt;go get github.com/alexandrevicenzi/go-sse&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Di bawah ini adalah contoh kode program implementasi SSE.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
    "encoding/json"
    "net/http"
    "strconv"
    "time"

    "github.com/alexandrevicenzi/go-sse"
)

func main() {
    name := "Latest Event"
    channel := "new-update-channel"

    const jsonData = `
            {
                "stringField": "Value",
                "intField": 123,
                "floatField": 3.14159,
                "booleanField": true
            }
        `

    var sseData map[string]string
    json.Unmarshal([]byte(jsonData), &amp;amp;sseData)

    s := sse.NewServer(nil)
    defer s.Shutdown()

    // Konfigurasi route http
    http.Handle("/", http.FileServer(http.Dir("./static"))) // dummy static html file yang akan menampilkan event source
    http.Handle("/events/", s)

    // Mengirimkan data setiap 3 detik sekali
    go func() {
        for {
            id := strconv.FormatInt(time.Now().UTC().UnixNano(), 10)
            sseData["timestamp"] = time.Now().Format("2006-01-02 15:04:05")

            data, err := json.Marshal(sseData)
            if err == nil {
                s.SendMessage("/events/"+channel, sse.NewMessage(id, string(data), name))
            }
            time.Sleep(3 * time.Second)
        }
    }()

    http.ListenAndServe(":8080", nil)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, kita jalankan function Main.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go run main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lalu, amati hasilnya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;C:\Users\benita.clarissa\Documents\go\src\github.com\Bhinneka\coba-coba&amp;gt;go run main.go
go-sse: 2021/11/28 10:52:29 server started.
go-sse: 2021/11/28 10:52:31 channel '/events/new-update-channel' created.
go-sse: 2021/11/28 10:52:31 new client connected to channel '/events/new-update-channel'.
go-sse: 2021/11/28 10:52:32 message sent to channel '/events/new-update-channel'.
go-sse: 2021/11/28 10:52:35 message sent to channel '/events/new-update-channel'.
go-sse: 2021/11/28 10:52:38 message sent to channel '/events/new-update-channel'.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SSE dari sisi backend sudah kita siapkan. Namun, kita perlu melakukan development agar client dapat menerima data yang di-push tersebut. Oleh karena itu, kita perlu menulis script pada sisi frontend yang akan berfungsi sebagai client dari SSE ini. Script pada sisi frontend dapat menggunakan bahasa pemrograman dan framework yang dapat mengakses HTML Server-Sent Events API. Salah satu contohnya adalah React JS.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referensi
&lt;/h1&gt;

&lt;p&gt;Cook, D. (2014). &lt;em&gt;Data Push Apps with HTML5 SSE: Pragmatic Solutions for Real-World Clients&lt;/em&gt; (1st ed.) [E-book]. O’Reilly Media.&lt;/p&gt;

</description>
      <category>sse</category>
      <category>go</category>
    </item>
    <item>
      <title>Perbedaan SSE dan WebSockets</title>
      <dc:creator>Benita Clarissa</dc:creator>
      <pubDate>Thu, 04 Nov 2021 04:50:06 +0000</pubDate>
      <link>https://forem.com/benitaclarissa/perbedaan-sse-dan-websockets-54e2</link>
      <guid>https://forem.com/benitaclarissa/perbedaan-sse-dan-websockets-54e2</guid>
      <description>&lt;p&gt;SSE dan WebSockets termasuk ke dalam teknologi data push. Lantas, apa yang membedakan keduanya? dan teknologi mana yang lebih baik untuk digunakan?&lt;/p&gt;

&lt;h1&gt;
  
  
  Perbedaan SSE dan WebSockets
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Server-Sent Events (SSE) adalah teknologi HTML5 yang akan membuat server melakukan push data ke client secara satu arah (one-way messaging).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WebSockets adalah teknologi HTML5 yang akan membuat server melakukan push data dua arah antara client dan server (two-way communication).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Kapan perlu menggunakan data push? WebSockets atau SSE?
&lt;/h1&gt;

&lt;p&gt;Berikut pertimbangan saat memilih teknologi data push yang akan diimplementasikan dalam aplikasi.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Seberapa sering server mengirimkan event (data) ke client? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jika server sering mengirimkan data ke client, aplikasi tersebut cocok menggunakan teknologi data push dibandingkan data pull.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Apakah latency dan baterai menjadi pertimbangan utama bagi user?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latency dan baterai dapat menjadi pertimbangan utama bagi mobile user. Konektivitas jaringan sangat penting bagi tipe user ini. Oleh karena itu, data push lebih baik dibandingkan data pull.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Seberapa sering client mengiriman event (data) ke server?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jika event terjadi dalam frekuensi rapat (di bawah 5 detik, atau bahkan 1 detik sekali), aplikasi tersebut lebih baik menggunakan WebSockets dibandingkan SSE. &lt;/li&gt;
&lt;li&gt;Jika event terjadi dalam frekuensi lebih jarang (5-10 detik sekali), Anda dapat menggunakan SSE dan bahkan data push technology tidak perlu terlalu diprioritaskan.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Apakah waktu pengiriman event dari server bisa diprediksi? &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ketika event dikirim lebih dari 1 menit sekali, data pull lebih baik karena tidak perlu membuka socket untuk SSE/WebSockets. &lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Apakah server mengirimkan (push) binary data ke client?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jika ada banyak binary data yang dikirimkan server, sebaiknya menggunakan WebSockets dibandingkan SSE (bahkan lebih baik menggunakan XHR polling dibandingkan SSE).&lt;/li&gt;
&lt;li&gt;Jika data binary hanya sedikit, lakukan encoding pada SSE untuk mengurangi jumlah byte yang dikirimkan&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Apakah client mengirimkan (push) binary data ke server?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;XMLHttpRequest (seperti: Ajax dan SSE) dan WebSockets bisa digunakan untuk mengirimkan binary data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Jadi, teknologi mana yang lebih baik?
&lt;/h1&gt;

&lt;p&gt;Masing-masing teknologi memiliki keunggulan yang berbeda, tergantung dari kebutuhan aplikasi yang dikembangkan. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Aplikasi yang membutuhkan komunikasi 2 arah antara client dan server&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;harus menggunakan WebSockets&lt;/li&gt;
&lt;li&gt;tidak cocok menggunaakn SSE&lt;/li&gt;
&lt;li&gt;Contoh: chat platform&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;

&lt;p&gt;Aplikasi yang hanya mengirimkan data 1 arah ke client&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sangat cocok menggunakan SSE&lt;/li&gt;
&lt;li&gt;tidak cocok menggunakan WebSockets&lt;/li&gt;
&lt;li&gt;Contoh: FX trading&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Selanjutnya
&lt;/h1&gt;

&lt;p&gt;Post selanjutnya akan membahas cara implementasi SSE. Implementasi backend akan menggunakan bahasa pemrograman Golang. Implementasi dari sisi frontend akan menggunakan teknologi ReactJS.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referensi
&lt;/h1&gt;

&lt;p&gt;Cook, D. (2014). &lt;em&gt;Data Push Apps with HTML5 SSE: Pragmatic Solutions for Real-World Clients&lt;/em&gt; (1st ed.) [E-book]. O’Reilly Media.&lt;/p&gt;

</description>
      <category>sse</category>
      <category>websockets</category>
    </item>
    <item>
      <title>Mengenal Server-Sent Events (SSE)</title>
      <dc:creator>Benita Clarissa</dc:creator>
      <pubDate>Tue, 05 Oct 2021 03:31:02 +0000</pubDate>
      <link>https://forem.com/benitaclarissa/mengenal-server-sent-events-sse-5do2</link>
      <guid>https://forem.com/benitaclarissa/mengenal-server-sent-events-sse-5do2</guid>
      <description>&lt;h1&gt;
  
  
  Apa itu SSE?
&lt;/h1&gt;

&lt;p&gt;Server-Sent Events (SSE) adalah teknologi HTML5 yang akan membuat server melakukan &lt;em&gt;push data&lt;/em&gt; ke client secara satu arah (&lt;em&gt;one-way messaging&lt;/em&gt;). Hal ini akan menjadikan aplikasi akan selalu mendapatkan update terbaru secara otomatis. User tidak perlu melakukan interaksi apa pun seperti refresh page, click button, atau sejenisnya.&lt;/p&gt;

&lt;h1&gt;
  
  
  Data Push vs Data Pull
&lt;/h1&gt;

&lt;p&gt;Secara garis besar, komunikasi data antara server dan client dapat terbagi 3 macam, yaitu: no-updates, data pull, dan data push.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ini adalah komunikasi data paling sederhana antara client dan server. Tidak ada update data secara otomatis dari server. User harus refresh / reload page untuk mendapatkan data terbaru.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5FJt3hLR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9781449371920/files/figs/dpah_0101.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5FJt3hLR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9781449371920/files/figs/dpah_0101.png" alt="No updates"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Pull&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data pull menggunakan teknik ajax untuk mendapatkan data terbaru dalam periode tertentu (contoh: 5 menit sekali). Client (browser) tetap harus melakukan request ke server secara otomatis untuk mendapatkan data terbaru. User tidak perlu refresh / reload halaman untuk mendapatkan data terbaru.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---Tjx8WXb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9781449371920/files/figs/dpah_0102.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Tjx8WXb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9781449371920/files/figs/dpah_0102.png" alt="Data Pull"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data Push&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pada data push, server yang akan mengirimkan data terbaru ke client. Hal ini membuat client (browser) tidak perlu melakukan request ke server. User juga tidak perlu melakukan refresh / reload halaman untuk mendapatkan data terbaru. SSE termasuk ke dalam kategori data push.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MeqNxz6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9781449371920/files/figs/dpah_0103.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MeqNxz6Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://learning.oreilly.com/api/v2/epubs/urn:orm:book:9781449371920/files/figs/dpah_0103.png" alt="Data Push"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Data push memiliki beberapa keunggulan dibandingkan data pull:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latency yang lebih rendah&lt;/li&gt;
&lt;li&gt;Saat tidak ada update, client tidak perlu melakukan request ke server secara otomatis sehingga meminimalkan resource/request yang terbuang.&lt;/li&gt;
&lt;li&gt;Lebih hemat bandwidth dan connection&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Aplikasi yang menggunakan SSE
&lt;/h1&gt;

&lt;p&gt;SSE sangat berguna untuk aplikasi web yang membutuhkan fresh data dalam kurun waktu singkat. Contohnya: kurs valuta asing, pergerakan harga saham, dan aplikasi lainnya yang  membutuhkan realtime data updates.&lt;/p&gt;

&lt;h1&gt;
  
  
  Selanjutnya
&lt;/h1&gt;

&lt;p&gt;Teknologi yang termasuk ke dalam data push adalah SSE dan WebSocket. Pada post selanjutnya, kita akan membahas mengenai perbedaan SSE dan WebSocket.&lt;/p&gt;

&lt;h1&gt;
  
  
  Referensi
&lt;/h1&gt;

&lt;p&gt;Cook, D. (2014). &lt;em&gt;Data Push Apps with HTML5 SSE: Pragmatic Solutions for Real-World Clients&lt;/em&gt; (1st ed.) [E-book]. O’Reilly Media.&lt;/p&gt;

</description>
      <category>sse</category>
    </item>
    <item>
      <title>Membuat Penjadwalan Otomatis (Cron Job Scheduler) menggunakan Golang</title>
      <dc:creator>Benita Clarissa</dc:creator>
      <pubDate>Thu, 16 Sep 2021 06:02:06 +0000</pubDate>
      <link>https://forem.com/benitaclarissa/membuat-penjadwalan-otomatis-cron-job-scheduler-menggunakan-golang-obg</link>
      <guid>https://forem.com/benitaclarissa/membuat-penjadwalan-otomatis-cron-job-scheduler-menggunakan-golang-obg</guid>
      <description>&lt;p&gt;Terkadang dalam sebuah aplikasi, ada tugas-tugas yang perlu dijalankan otomatis sesuai jadwal yang telah ditentukan. Contohnya, ketika kita menerima email otomatis yang berisi ucapan tahun baru, notifikasi agenda setiap hari kerja jam 8 pagi, tagihan setiap bulan tanggal 10 jam 9 pagi, cek pesanan baru setiap 10 menit, dan lainnya. Artikel ini akan membahas bagaimana cara membuat penjadwalan otomatis menggunakan golang.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bagaimana penjadwalan otomatis dilakukan pada server?
&lt;/h2&gt;

&lt;p&gt;Pada artikel ini, penjadwalan otomatis akan dilakukan pada server berbasis Linux dengan menggunakan &lt;strong&gt;cron&lt;/strong&gt;. Cron adalah sebuah command Linux untuk menjalankan script secara terjadwal. &lt;/p&gt;

&lt;p&gt;Di bawah ini adalah cara mengatur penjadwalan pada crontab.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* * * * * perintah yang akan dieksekusi
– – – – –
| | | | |
| | | | +—– day of week (0 – 7) (Sunday=0)
| | | +——- month (1 – 12)
| | +——— day of month (1 – 31)
| +———– hour (0 – 23)
+————- min (0 – 59)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contoh:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Email otomatis untuk ucapan tahun baru jam 12 malam&lt;br&gt;
&lt;code&gt;0 0 1 1 * /home/user/automail-new-year.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Email otomatis tagihan setiap bulan tanggal 10 jam 7 pagi&lt;br&gt;
&lt;code&gt;0 07 10 * * /home/user/automail-billing.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Notifikasi agenda setiap hari kerja (Senin-Jumat) jam 9 pagi&lt;br&gt;
&lt;code&gt;0 09 * * 1-5 /home/user/notification-daily-agenda.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Notifikasi pesanan baru setiap 10 menit sekali&lt;br&gt;
&lt;code&gt;*/10 * * * * /home/user/notification-new-order.sh&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ya, saya sudah memahami cron. Bagaimana cara implementasi pada Go?
&lt;/h2&gt;

&lt;p&gt;Setelah melakukan pencarian terhadap beberapa package go terkait scheduler, saya memilih package &lt;a href="https://github.com/robfig/cron"&gt;&lt;code&gt;robfig/cron&lt;/code&gt;&lt;/a&gt; v3. Cara implementasinya cukup sederhana. Mari kita lihat bersama.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;package main

import (
   "fmt"
   "os"
   "os/signal"
   "syscall"
   "time"

   cron "github.com/robfig/cron/v3"
)

func main() {
   // set scheduler berdasarkan zona waktu sesuai kebutuhan
   jakartaTime, _ := time.LoadLocation("Asia/Jakarta") 
   scheduler := cron.New(cron.WithLocation(jakartaTime))

   // stop scheduler tepat sebelum fungsi berakhir
   defer scheduler.Stop()

   // set task yang akan dijalankan scheduler
   // gunakan crontab string untuk mengatur jadwal
   scheduler.AddFunc("0 0 1 1 *", func() { SendAutomail("New Year") })
   scheduler.AddFunc("0 07 10 * *", SendMonthlyBillingAutomail)
   scheduler.AddFunc("0 09 * * 1-5", NotifyDailyAgenda)
   scheduler.AddFunc("*/10 * * * *", NotifyNewOrder)

   // start scheduler
   go scheduler.Start()

   // trap SIGINT untuk trigger shutdown.
   sig := make(chan os.Signal, 1)
   signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
   &amp;lt;-sig
}

func SendAutomail(automailType string) {
    // ... instruksi untuk mengirim automail berdasarkan automailType
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " SendAutomail " + automailType + " telah dijalankan.\n")
}

func SendMonthlyBillingAutomail(){
    // ... instruksi untuk mengirim automail berisi tagihan
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " SendMonthlyBillingAutomail telah dijalankan.\n")
}

func NotifyDailyAgenda(){
    // ... instruksi untuk mengirim notifikasi agenda harian
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " NotifyDailyAgenda telah dijalankan.\n")
}

func NotifyNewOrder(){
    // ... instruksi untuk mengecek pesanan baru, lalu mengirimkan notifikasi
    fmt.Printf(time.Now().Format("2006-01-02 15:04:05") + " NotifyNewOrder telah dijalankan.\n")
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setelah itu, kita jalankan function Main.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;go run main.go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lalu, amati hasilnya.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2021-09-16 09:00:00 NotifyDailyAgenda telah dijalankan.
2021-09-16 12:30:00 NotifyNewOrder telah dijalankan.
2021-09-16 12:40:00 NotifyNewOrder telah dijalankan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Penjadwalan otomatis dengan golang sudah berhasil dibuat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selanjutnya
&lt;/h2&gt;

&lt;p&gt;Berikut beberapa link yang dapat dijadikan referensi.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dokumentasi lengkap package &lt;a href="https://github.com/robfig/cron"&gt;robfig/cron&lt;/a&gt; dapat dilihat dari link tersebut.&lt;/li&gt;
&lt;li&gt;Gunakan &lt;a href="https://crontab.guru/"&gt;crontab.guru&lt;/a&gt; untuk mengatur crontab dan memastikan waktu penjadwalan sudah sesuai dengan kebutuhan.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>go</category>
      <category>cron</category>
    </item>
  </channel>
</rss>
