Setiap program atau aplikasi pada umumnya memiliki input dan output data, saat kita mempraktikan membuat program kita selalu menenulis data langsung di kode untuk kemudian di program menampilkan outputnya. Disini kita akan membahas beberapa metode untuk mendapatkan input manual dari pengguna sehingga output program kita bisa lebih beragam.
Menggunakan os Argumen
Argumen diberikan sebelum program dijalankan, jadi ketika pengguna mengetikan nama program untuk dieksekusi pengguna juga perlu mengetikan data yang ingin dimasukkan setelah nama program. Data argumen berupa data string array. Untuk lebih jelasnya jalankan kode program berikut.
package main
import (
"fmt"
"os"
"strings"
)
func main() {
argumen := os.Args
fmt.Println("Semua argument :", argumen)
if len(argumen) > 1 {
fmt.Println("Argumen 1:", argumen[1])
}
if len(argumen) > 2 {
fmt.Println("Argumen 2:", argumen[2])
}
if len(argumen) > 1 {
data := argumen[1:]
fmt.Println("Data Argument:", argumen[1:])
datastring := strings.Join(data, " ")
fmt.Println("Gabungan data:", datastring)
}
//fmt.Println(argumen[100])
}
Hasil output:
> $ go run main.go "test ta" ajs as ss
Semua argument : [/tmp/go-build4247458255/b001/exe/main test ta ajs as ss]
Argumen 1: test ta
Argumen 2: ajs
Data Argument: [test ta ajs as ss]
Gabungan data: test ta ajs as ss
Dari hasil output tersebut dapat kita lihat bahwa menggunakan argumen semua data disimpan dalam bentuk array string dan dimulai dengan nama perintah program yang dijalankan pada indeks pertama /tmp/go-build4247458255/b001/exe/main
dan diikuti data yang di inputkan.
kekurangan dari input menggunakan argumen adalah datanya berupa string dan kita perlu mengkonversi datanya ke tipe data lain jika kita ingin menggunakan data selain string, misalnya double
atau integer
. Selain itu pengguna perlu mengetahui jumlah dan urutan data yang perlu diinputan kedalam argumen. kurang satu argumen saja output program bisa error. Hal ini membuat program kita kurang user friendly. Untuk sekedar contoh kamu bisa uncomment baris fmt.Println(argumen[100])
pada kode program.
Menggunakan Fungsi Scanln()
Menggunakan fungsi scanln lebih mudah dimengerti oleh pengguna, dikarenakan kita bisa menuliskan keterangan sebelum input yang akan diisi pengguna.
package main
import "fmt"
func main() {
var input string
fmt.Print("Masukkan Data: ")
fmt.Scanln(&input)
fmt.Println("Data yang kamu inputkan :", input)
}
Kita bisa membuat berapapun variabel yang kita inginkan untuk menyimpan data dari pengguna, dan menggunakan Scanln()
untuk mengisinya. Tapi kekurangan dari Scanln()
adalah datanya berupa string, jadi jika kita ingin memproses data lain selain string kita perlu mengkonversinya ke data yang kita perlukan.
Selain itu Scanln()
tidak bisa menyimpan data berupa kalimat, atau jika kita menginputkan data dengan spasi maka data setelah spasi tidak dapat digunakan oleh aplikasi. seperti contoh input berikut:
go run main.go
Masukkan Data: halo dunia
Data yang kamu inputkan : halo
Menggunakan fungsi Scanf()
Sama seperti Scanln()
fungsi Scanf()
dapat kita gunakan untuk menerima input dari pengguna secara interaktif. Bedanya menggunakan Scanf()
, kita bisa memformat data yang diinputkan pengguna dalam bentuk string
,decimal
,dan float
.
Perlu diingat Scanf()
sama dengan fungsi Scanln()
, jadi ketika menginputkan nama, kamu hanya bisa menginputkan nama depannya saja.
package main
import "fmt"
func main() {
var nama string
var umur int
var tinggi float32
//input
fmt.Print("Masukkan nama:")
fmt.Scanf("%s", &nama)
fmt.Print("Masukkan umur:")
fmt.Scanf("%d", &umur)
fmt.Print("Masukkan tinggi:")
fmt.Scanf("%f", &tinggi)
//output
fmt.Println("\nData yang kamu inputkan:")
fmt.Println("Nama:", nama)
fmt.Println("Umur:", umur)
fmt.Println("Tinggi:", tinggi)
}
Menggunakan fungsi ReadString()
Kedua fungsi Scanf()
dan Scanln()
sama-sama tidak bisa menerima input string yang berupa kalimat. Jika kita ingin menerima input berupa kalimat, kita bisa menggunakan fungsi ReadString()
untuk melengkapi program yang telah kita buat sebelumnya.
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
var nama string
var umur int
var tinggi float32
reader := bufio.NewReader(os.Stdin)
//input
fmt.Print("Masukkan nama:")
nama, _ = reader.ReadString('\n')
fmt.Print("Masukkan umur:")
fmt.Scanf("%d", &umur)
fmt.Print("Masukkan tinggi:")
fmt.Scanf("%f", &tinggi)
//output
fmt.Println("\nData yang kamu inputkan:")
fmt.Println("Nama:", nama)
fmt.Println("Umur:", umur)
fmt.Println("Tinggi:", tinggi)
}
Jalankan program, maka hasilnya sempurna seperti yang kita inginkan:
> $ go run main.go
Masukkan nama:Yaka Lee
Masukkan umur:19
Masukkan tinggi:7.5
Data yang kamu inputkan:
Nama: Yaka Lee
Umur: 19
Tinggi: 7.5