I am new in Golang, and decided to create a function that could cater to my needs of reading an integer from stdin
. I need the function to be as efficient and fast as possible.
package main
import(
"fmt"
"bufio"
"os"
"strconv"
)
type NoIntRead int
func (err *NoIntRead) Error() string{
return fmt.Sprintf("No integer was read!")
}
var(
inputreader = bufio.NewReader(os.Stdin)
mybyteslice []byte = make([]byte,11)
)
func ReadInt() (int,error){
var mybyte byte
var myint int
var err error
var size int = 0
for{
mybyte,err = inputreader.ReadByte()
if mybyte == '\n' || mybyte == ' ' || err != nil{
if size == 0{
myerr := NoIntRead(1)
return 0,&myerr
}
mystring := string(mybyteslice[:size])
myint,err = strconv.Atoi(mystring)
if err != nil{
myerr := NoIntRead(1)
return 0, &myerr
}
return myint,nil
}
mybyteslice[size] = mybyte
size++
}
}
func main(){
var myint int
var err error
for{
myint,err = ReadInt()
if err != nil{
fmt.Println(err)
break;
}
fmt.Println(myint)
}
}
Is there a more efficient way to read integers from stdin
? If yes, I would be more than grateful if someone could point me into the right direction.