无法在函数中定义变量-Go

I am having a little trouble with what I though was a simple task.

I have a function that formats a struct that holds an hour and a minute value and formats it into a string.

type Clock struct {
    h int
    m int
}

func (c *Clock) String() string {
    h string
    m string
    if c.m < 10 {
        m := fmt.Sprintf("0%d", c.m)
    } else {
        m := fmt.Sprintf("%d", c.m)
    }
    if c.h < 10 {
        h := fmt.Sprintf("0%d", c.h)
    } else {
        h := fmt.Sprintf("%d", c.h)
    }
    return fmt.Sprintf("%s:%s", h, m)
}

The error I am getting is:

syntax error: unexpected name, expecting semicolon or newline or } for the line h string above.

Any idea what is going on here? I figured I would simple use a temporary variable to format the int values

You need to declare:

var h string
var m string

And do not use := but = when affecting values to h and m (or you would define those only in their inner scope, instead of reusing the variables defined before)

if c.m < 10 {
    m = fmt.Sprintf("0%d", c.m)
} else {
    m = fmt.Sprintf("%d", c.m)
}
if c.h < 10 {
    h = fmt.Sprintf("0%d", c.h)
} else {
    h = fmt.Sprintf("%d", c.h)
}

Full example: play.golang.org

Output: Hello, playground 02:08

Declare the String method variables once (var). Do not redeclare them with short variable declarations (:=). For example,

package main

import "fmt"

type Clock struct {
    h int
    m int
}

func (c *Clock) String() string {
    var (
        h string
        m string
    )
    if c.m < 10 {
        m = fmt.Sprintf("0%d", c.m)
    } else {
        m = fmt.Sprintf("%d", c.m)
    }
    if c.h < 10 {
        h = fmt.Sprintf("0%d", c.h)
    } else {
        h = fmt.Sprintf("%d", c.h)
    }
    return fmt.Sprintf("%s:%s", h, m)
}

func main() {}

References:

The Go Programming Language Specification

Declarations and scope

Type declarations

Variable declarations

Short variable declarations