strings.Split,stdin不返回切片/数组

It seems that strings.split(" ") is not returning an array. I have no idea why this is. I'm sure I am using it in a similar context elsewhere.

package main

import (
    "fmt"
    "strconv"
    "strings"
)

func main() {
    var seedCost float64
    var lawnNo int
    var in string
    var area float64
    var wh []string

    fmt.Scanln(&seedCost) //2 is inputted
    fmt.Scanln(&lawnNo)   //3
    lawnCost := 0.00

    for i := 0; i < lawnNo; i++ {
        fmt.Scanln(&in) //2 3 is inputted
        wh = strings.Split(in, " ")
        fmt.Println(wh[0])
        fmt.Println(wh[1]) //Test throwing exception, index out of range
        w, _ := strconv.ParseFloat(wh[0], 64)
        h, _ := strconv.ParseFloat(wh[1], 64) //EXCEPTIONAL LINE, index out of range

        area = w * h
        lawnCost += area * seedCost
    }

    ans := strconv.FormatFloat(lawnCost, 'E', 8, 64)
    fmt.Println(ans)
}

fmt.Scanln stops reading after the spaces.

Two Approaches to solve this Problem

1st Approach: USE Scanf

var in string
fmt.Scanf("%q", &in)

But then your input should be enclosed within the double quotes like "2 3"

2nd Approach: USE bufio

The best way I consider

scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan(){
   in = scanner.Text()
   break  //optional line if your input has a single line
}
fmt.Println(in)

This shall solve the problem in the best way

Scanln seemed to only read until a space so I solved this problem by using an extra string

fmt.Scanln(&in, &in1)

It is because fmt.Scanln doesn't take inputs after first space so if you entered 2 3 4 at fmt.Scanln(&in) then only 2 will be assigned to in.

Try using package bufio:

scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
in := scanner.Text()
wh = strings.Split(in, " ")
fmt.Println(wh[0])
fmt.Println(wh[1])