Parsing data out of a string with a specific format and storing the parsed values into variables is a perfect task for and is easily done using fmt.Sscanf():
src := "1,2,3"
var a, b, c int
parsed, err := fmt.Sscanf(src, "%d,%d,%d", &a, &b, &c)
fmt.Println(parsed, err, a, b, c)
Output (try it on the Go Playground):
3 <nil> 1 2 3
Making it strict
As noted, this is very lenient, and will also successfully parse the "1,2,3," and "1,2,3,4" inputs. This may or may not be a problem (depending on your case). If you want to make it strict, you can apply this little trick:
var temp int
parsed, err := fmt.Sscanf(src+",1", "%d,%d,%d,%d", &a, &b, &c, &temp)
What we do is we append one more of the numbers that matches the input. If the original input does not end with a number (such as "1,2,3,"), parsing will fail with a non-nil error, and the above example gives:
3 expected integer 1 2 3
Try it on the Go Playground. Of course it will continue to parse "valid" inputs without any errors.
Note that this still accepts the input "1,2,3,4". We can "reduce" this trick to a single character, and we don't necessarily need a "target" variable to store it, it may simply be designated by the format string, like in this example:
parsed, err := fmt.Sscanf(src+"~", "%d,%d,%d~", &a, &b, &c)
We append a special character unlikely to happen in the input, and we expect that special character in the format string. Attempting to parse an invalid input (such as "1,2,3," or "1,2,3,4") will result in an error such as:
3 input does not match format 1 2 3
Try it on the Go Playground.