fatkulnurk
8/29/2018 - 6:50 AM

golang: fungsi untuk mendapatkan beberapa baris data inputan user di terminal / stdin

golang: fungsi untuk mendapatkan beberapa baris data inputan user di terminal / stdin

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func ScanLn(rslt *[]interface{}) {
	n := 0
	scanner := bufio.NewScanner(os.Stdin)
	scanner.Split(func(data []byte, atEOF bool) (adv int, tkn []byte, err error) {
		//callback ini dipanggil setiap pindah baris baru (user ketik Enter)
		if atEOF {
			*rslt = make([]interface{}, n) //menentukan alokasi memory yang dibutuhkan
			i := 0
			for k := 0; k < n; k++ {
				adv, tkn, err = bufio.ScanLines(data[i:], atEOF)
				i += adv
				(*rslt)[k] = string(tkn)
			}
		}
		n++
		return
	})
	scanner.Scan()
}
func main() {
	println("inputkan beberapa baris data, akhiri dengan Ctrl-Z lalu Enter")
	var result []interface{}
	ScanLn(&result)
	f := "hasil :\n" + strings.Repeat(", %s", len(result))[2:] + "\n"
	fmt.Printf(f, result...)
}