0% found this document useful (0 votes)
2K views20 pages

Panduan CRUD dengan Golang

The document discusses CRUD operations in Go language and Polymer framework. It includes 5 questions about CRUD in Go, struct and handler functions in Go, functions of Go build and run, creating and inputting data to database table, and outputting table data. It also provides code templates for a Polymer web app using CRUD with Vaadin grid, Paper Elements, and REST API calls for managing student data.

Uploaded by

Deris Putra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2K views20 pages

Panduan CRUD dengan Golang

The document discusses CRUD operations in Go language and Polymer framework. It includes 5 questions about CRUD in Go, struct and handler functions in Go, functions of Go build and run, creating and inputting data to database table, and outputting table data. It also provides code templates for a Polymer web app using CRUD with Vaadin grid, Paper Elements, and REST API calls for managing student data.

Uploaded by

Deris Putra
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd

1. Apa yang dimaksud dengan crud?

(10 poin)
2. Sebutkan struktur crud pada go Language! (10 poin)
3. Jelaskan fungsi dan tujuan go build serta go run ! (10 poin)
4. Membuat dan menginput data pada table database! (20 poin)

id npm Nama Kelas Profile

1 51416277 Azman Agung Nugraha 4IA17 [Link]

2 15117348 Rizky Imam Nugroho 3KA01 [Link]

3 52417067 Fahmi Ardhiansyah 3IA03 [Link]

5. Buatlah output seperti gambar dibawah! (50 poin)


Berikut adalah potongan kode untuk struct dan function handler pada [Link].
Template Polymer
[Link]
<link rel="import" href="../bower_components/polymer/[Link]">
<link rel="import" href="../bower_components/app-layout/app-drawer/app-
[Link]">
<link rel="import" href="../bower_components/app-layout/app-drawer-layout/app-
[Link]">
<link rel="import" href="../bower_components/app-layout/app-header/app-
[Link]">
<link rel="import" href="../bower_components/app-layout/app-header-layout/app-
[Link]">
<link rel="import" href="../bower_components/app-layout/app-scroll-effects/app-
[Link]">
<link rel="import" href="../bower_components/app-layout/app-toolbar/app-
[Link]">
<link rel="import" href="../bower_components/app-route/[Link]">
<link rel="import" href="../bower_components/app-route/[Link]">
<link rel="import" href="../bower_components/iron-pages/[Link]">
<link rel="import" href="../bower_components/iron-selector/[Link]">
<link rel="import" href="../bower_components/paper-icon-button/paper-icon-
[Link]">
<link rel="import" href="[Link]">

<link rel="lazy-import" href="[Link]">
<link rel="lazy-import" href="[Link]">

<dom-module id="my-app">
  <template>
    <style>
      :host {
        --app-primary-color: #4285f4;
        --app-secondary-color: black;

        display: block;
      }

      app-drawer-layout:not([narrow]) [drawer-toggle] {
        display: none;
      }

      app-header {
        color: #fff;
        background-color: var(--app-primary-color);
      }

      app-header paper-icon-button {
        --paper-icon-button-ink-color: white;
      }

      .drawer-list {
        margin: 0 20px;
      }

      .drawer-list a {
        display: block;
        padding: 0 16px;
        text-decoration: none;
        color: var(--app-secondary-color);
        line-height: 40px;
      }

      .drawer-list [Link]-selected {
        color: black;
        font-weight: bold;
      }
    </style>

    <app-location route="{{route}}" url-space-regex="^[[rootPath]]">
    </app-location>

    <app-route route="{{route}}" pattern="[[rootPath]]:page" dat
a="{{routeData}}" tail="{{subroute}}">
    </app-route>

    <app-drawer-layout fullbleed narrow="{{narrow}}">
      <!-- Drawer content -->
      <app-drawer id="drawer" slot="drawer" swipe-open="[[narrow]]">
        <app-toolbar>Menu</app-toolbar>
        <iron-selector selected="[[page]]" attr-for-selected="name" clas
s="drawer-list" role="navigation">
          <a name="mahasiswa" href="[[rootPath]]mahasiswa">Mahasiswa</a>
          <!-- <a name="view2" href="[[rootPath]]view2">View Two</a>
          <a name="view3" href="[[rootPath]]view3">View Three</a> -->
        </iron-selector>
      </app-drawer>

      <!-- Main content -->
      <app-header-layout has-scrolling-region>

        <app-header slot="header" condenses reveals effects="waterfall">
          <app-toolbar>
            <paper-icon-button icon="my-icons:menu" drawer-toggle></paper-icon-
button>
            <div main-title>My App</div>
          </app-toolbar>
        </app-header>

        <iron-pages selected="[[page]]" attr-for-selected="name" fallback-
selection="view404" role="main">
          <mahasiswa-page name="mahasiswa"></mahasiswa-page>
          <!-- <my-view2 name="view2"></my-view2>
          <my-view3 name="view3"></my-view3> -->
          <my-view404 name="view404"></my-view404>
        </iron-pages>
      </app-header-layout>
    </app-drawer-layout>
  </template>

  <script>
    // Gesture events like tap and track generated from touch will not be
    // preventable, allowing for better scrolling performance.
    [Link](true);

    class MyApp extends [Link] {
      static get is() { return 'my-app'; }

      static get properties() {
        return {
          page: {
            type: String,
            reflectToAttribute: true,
            observer: '_pageChanged',
          },
          routeData: Object,
          subroute: Object,
          // This shouldn't be neccessary, but the Analyzer isn't picking up
          // [Link]#rootPath
          rootPath: String,
        };
      }

      static get observers() {
        return [
          '_routePageChanged([Link])',
        ];
      }

      _routePageChanged(page) {
        // If no page was found in the route data, page will be an empty string.
        // Default to 'view1' in that case.
        [Link] = page || 'mahasiswa';

        // Close a non-persistent drawer when the page & route are changed.
        if (!this.$.[Link]) {
          this.$.[Link]();
        }
      }

      _pageChanged(page) {
        // Load page import on demand. Show 404 page if fails
        const resolvedPageUrl = [Link](page + '.html');
        [Link](
          resolvedPageUrl,
          null,
          this._showPage404.bind(this),
          true);
      }

      _showPage404() {
        [Link] = 'view404';
      }
    }

    [Link]([Link], MyApp);
  </script>
</dom-module>

[Link]
<link rel="import" href="../bower_components/polymer/[Link]">
<link rel="import" href="../bower_components/polymer/lib/elements/[Link]">

<link rel="import" href="../bower_components/vaadin-grid/theme/material/vaadin-
[Link]">

<link rel="import" href="../bower_components/paper-input/[Link]">
<link rel="import" href="../bower_components/paper-button/[Link]">
<link rel="import" href="../bower_components/paper-dialog/[Link]">

<link rel="import" href="../bower_components/iron-input/[Link]">
<link rel="import" href="../bower_components/iron-ajax/[Link]">

<link rel="import" href="[Link]">

<link rel="import" href="element/[Link]">
<link rel="import" href="element/[Link]">
<link rel="import" href="element/[Link]">

<dom-module id="mahasiswa-page">
  <template>
    <style include="shared-styles">
      :host {
        display: block;

        padding: 10px;
      }
    </style>
    <custom-style>
      <style is="custom-style">
        paper-input-container {
          width: 30%;
          float: right;
        }

        paper-dialog#deleteModal {
          width: 250px;
          max-width: 250px;
        }

        .warning,
        .danger {
          margin-left: -20px;
        }
      </style>
    </custom-style>

    <div class="card">
      <h1>Data Mahasiswa</h1>
      <p>Data Mahasiswa yang terdapat pada database</p>

      <template is="dom-if" if="[[success]]">
        <p class="alert-success"><strong>Message:</strong> [[success]]</p>
      </template>

      <!-- Get data from rest api -->
      <iron-ajax auto url="{{url}}" method="{{method}}" handle-as="json" content
-type="application-json"
        last-response="{{response}}"></iron-ajax>

      <paper-button raised class="link" style="margin-bottom: 20px;" on-
click="openAddModal">Tambah Data</paper-button>

      <paper-input-container no-label-float>
        <label slot="label">Search..</label>
        <iron-input slot="input">
          <input type="text" value="{{keyword::input}}" width="30%">
        </iron-input>
      </paper-input-container>

      <!-- Datatable -->
      <vaadin-grid items="{{[Link]}}">
        <vaadin-grid-column width="50px">
          <template class="header">#</template>
          <template>
            <div>[[index]]</div>
          </template>
        </vaadin-grid-column>
        <vaadin-grid-column width="80px">
          <template class="header">Profile</template>
          <template>
            <img src="/img/[[[Link]]]" alt="profile" width="20px">
          </template>
        </vaadin-grid-column>
        <vaadin-grid-column>
          <template class="header">Npm</template>
          <template>
            <div>[[[Link]]]</div>
          </template>
        </vaadin-grid-column>
        <vaadin-grid-column width="150px">
          <template class="header">Nama</template>
          <template>
            <div>[[[Link]]]</div>
          </template>
        </vaadin-grid-column>
        <vaadin-grid-column>
          <template class="header">Kelas</template>
          <template>
            <div>[[[Link]]]</div>
          </template>
        </vaadin-grid-column>
        <vaadin-grid-column width="200px">
          <template class="header">Action</template>
          <template>
            <paper-button id="[[[Link]]]" class="warning" on-
click="openEditModal">Edit
            </paper-button>
            <paper-button id="[[[Link]]]" class="danger" on-
click="openDeleteModal">Delete
            </paper-button>
          </template>
        </vaadin-grid-column>
      </vaadin-grid>
      <!-- End of datatable -->

      <!-- Crud view modal -->
      <paper-dialog id="addModal" with-backdrop>
        <form-add success="{{success}}" response="{{response}}"></form-add>
      </paper-dialog>
      <paper-dialog id="editModal" with-backdrop>
        <form-edit uid="{{uid}}" success="{{success}}" respons
e="{{response}}"></form-edit>
      </paper-dialog>
      <paper-dialog id="deleteModal" with-backdrop>
        <form-delete uid="{{uid}}" success="{{success}}" respons
e="{{response}}"></form-delete>
      </paper-dialog>
      <!-- End of modal -->

    </div>
  </template>

  <script>
    class MahasiswaPage extends [Link] {
      static get is() { return 'mahasiswa-page'; }

      static get properties() {
        return {
          response: {
            type: Object,
          },
          keyword: {
            type: String,
            value: ''
          },
          url: {
            computed: '_computeUrl(keyword)'
          },
          method: {
            type: String,
            value: "GET"
          },
          success: String,
          uid: {
            type: Number,
            notify: true
          }
        }
      }

      _computeUrl(keyword) {
        if (keyword) {
          return ['/mahasiswa/search', keyword].join('/');
        } else {
          return '/api/mahasiswa';
        }
      }

      openAddModal() {
        this.$.[Link]();
      }

      openEditModal(e) {
        [Link] = [Link];
        this.$.[Link]();
      }

      openDeleteModal(e) {
        [Link] = [Link];
        this.$.[Link]();
      }
    }

    [Link]([Link], MahasiswaPage);
  </script>
</dom-module>
[Link]
<link rel="import" href="../../bower_components/polymer/[Link]">

<link rel="import" href="../../bower_components/paper-button/[Link]">
<link rel="import" href="../../bower_components/paper-input/[Link]">

<link rel="import" href="../../bower_components/iron-ajax/[Link]">
<link rel="import" href="../../bower_components/iron-input/[Link]">

<link rel="import" href="../[Link]">

<dom-module id="form-add">
    <template>
        <style include="shared-styles">
            :host {
                display: block;

                padding: 10px;
            }
        </style>

        <h2>Tambah Data User</h2>
        <paper-input-container>
            <iron-input slot="input">
                <input type="text" value="{{[Link]::input}}" placeholder="
Npm">
            </iron-input>
        </paper-input-container>
        <paper-input-container>
            <iron-input slot="input">
                <input type="text" value="{{[Link]::input}}" placeholder=
"Nama">
            </iron-input>
        </paper-input-container>
        <paper-input-container>
            <iron-input slot="input">
                <input type="text" value="{{[Link]::input}}" placeholder
="Kelas">
            </iron-input>
        </paper-input-container>

        <div class="buttons">
            <paper-button raised class="link" on-click="addMahasiswa" styl
e="margin-top: 20px;" dialog-confirm>Tambah
                Data
            </paper-button>
        </div>

        <iron-ajax auto id="mahasiswaAjax" url="{{url}}" method="{{method}}" han
dle-as="text"
            content-type="application/json" on-response="_handleInsert">
        </iron-ajax>
    </template>

    <script>
        class FormAdd extends [Link] {
            static get is() { return 'form-add'; }

            static get properties() {
                return {
                    formData: {
                        type: Object,
                        value: function () {
                            return { id: 0, npm: '', nama: '', kelas: '' }
                        }
                    },
                    url: {
                        type: String,
                        value: '/api/mahasiswa'
                    },
                    method: {
                        type: String,
                        value: 'GET'
                    },
                    success: {
                        type: String,
                        notify: true
                    },
                    response: {
                        type: Object,
                        notify: true
                    }
                }
            }

            addMahasiswa() {
                [Link] = '/api/mahasiswa';
                [Link] = 'POST';
                [Link] = 'Data mahasiswa berhasil ditambahkan';
                this.$.[Link] = [Link];
                [Link] = {};
            }

            _handleInsert(e) {
                [Link] = 'GET';
                [Link]('response', [Link]([Link]));
            }
        }

        [Link]([Link], FormAdd);
    </script>
</dom-module>

[Link]
<link rel="import" href="../../bower_components/polymer/[Link]">

<link rel="import" href="../../bower_components/paper-button/[Link]">
<link rel="import" href="../../bower_components/paper-input/[Link]">

<link rel="import" href="../../bower_components/iron-ajax/[Link]">
<link rel="import" href="../../bower_components/iron-input/[Link]">

<link rel="import" href="../[Link]">

<dom-module id="form-edit">
    <template>
        <style include="shared-styles">
            :host {
                display: block;

                padding: 10px;
            }
        </style>

        <h2>Ubah Data Mahasiswa</h2>

        <input type="hidden" value="{{[Link]::input}}">
        <paper-input-container>
            <iron-input slot="input">
                <input type="text" value="{{[Link]::input}}" placeholder="
Npm">
            </iron-input>
        </paper-input-container>
        <paper-input-container>
            <iron-input slot="input">
                <input type="text" value="{{[Link]::input}}" placeholder=
"Nama">
            </iron-input>
        </paper-input-container>
        <paper-input-container>
            <iron-input slot="input">
                <input type="text" value="{{[Link]::input}}" placeholder
="Kelas">
            </iron-input>
        </paper-input-container>

        <div class="buttons">
            <paper-button raised class="link" on-click="editMahasiswa" styl
e="margin-top: 20px;" dialog-confirm>Ubah
                Data
            </paper-button>
        </div>

        <iron-ajax auto id="getMahasiswaAjax" url="{{mhsurl}}" method="GET" hand
le-as="json"
            content-type="application/json" on-response="_handleGet">
        </iron-ajax>
        <iron-ajax auto id="editMahasiswaAjax" url="{{url}}" method="{{method}}" 
handle-as="text"
            content-type="application/json" on-response="_handleUpdate">
        </iron-ajax>
    </template>

    <script>
        class FormEdit extends [Link] {
            static get is() { return 'form-edit'; }

            static get properties() {
                return {
                    formData: {
                        type: Object,
                        value: function () {
                            return { id: 0, npm: '', nama: '', kelas: '' }
                        }
                    },
                    url: String,
                    mhsurl: {
                        computed: '_computeUrl(uid)'
                    },
                    method: String,
                    success: {
                        type: String,
                        notify: true
                    },
                    response: {
                        type: Object,
                        notify: true
                    },
                    uid: Number,
                }
            }

            _computeUrl(uid) {
                return ['/api/mahasiswa', uid].join('/');
            }

            editMahasiswa() {
                [Link] = '/api/mahasiswa';
                [Link] = 'PUT';
                [Link] = 'Data mahasiswa berhasil diubah';
                this.$.[Link] = [Link];
                [Link] = {};
            }

            _handleUpdate(e) {
                [Link] = 'GET';
                [Link]('response', [Link]([Link]));
            }

            _handleGet(e) {
                [Link]('formData', [Link]);
            }

        }

        [Link]([Link], FormEdit);
    </script>
</dom-module>

[Link]
<link rel="import" href="../../bower_components/polymer/[Link]">
<link rel="import" href="../../bower_components/paper-button/[Link]">
<link rel="import" href="../../bower_components/iron-ajax/[Link]">

<link rel="import" href="../[Link]">

<dom-module id="form-delete">
    <template>
        <style include="shared-styles">
            :host {
                display: block;

                padding: 10px;
            }
        </style>

        <h2>Yakin hapus data?</h2>

        <div class="buttons">
            <paper-button class="link" dialog-dismiss>Batal</paper-button>
            <paper-button class="danger" on-click="deleteMahasiswa" raised dialo
g-confirm>Hapus</paper-button>
        </div>

        <iron-ajax auto url="{{url}}" method="{{method}}" handle-as="json" conte
nt-type="application/json"
            on-response="_handleDelete"></iron-ajax>
    </template>

    <script>
        class FormDelete extends [Link] {
            static get is() { return 'form-delete'; }

            static get properties() {
                return {
                    uid: Number,
                    url: String,
                    method: String,
                    success: {
                        type: String,
                        notify: true
                    },
                    response: {
                        type: Object,
                        notify: true
                    }
                }
            }

            deleteMahasiswa() {
                [Link] = 'DELETE';
                [Link] = '/api/mahasiswa/' + [Link];
                [Link] = 'Data mahasiswa berhasil dihapus';
            }

            _handleDelete(e) {
                [Link] = 'GET';
                [Link] = '/api/mahasiswa';
                [Link]('response', [Link]);
            }
        }

        [Link]([Link], FormDelete);
    </script>
</dom-module>

You might also like