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