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

无法在函数-Go中定义变量,go,Go,我觉得这是一项简单的任务,但我有点麻烦 我有一个函数,它可以格式化一个包含一小时和一分钟值的结构,并将其格式化为字符串 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

我觉得这是一项简单的任务,但我有点麻烦

我有一个函数,它可以格式化一个包含一小时和一分钟值的结构,并将其格式化为字符串

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)
}
类型时钟结构{
h int
密特
}
func(c*时钟)字符串()字符串{
h字符串
m字符串
如果c.m<10{
m:=fmt.Sprintf(“0%d”,c.m)
}否则{
m:=fmt.Sprintf(“%d”,c.m)
}
如果c.h<10{
h:=fmt.Sprintf(“0%d”,c.h)
}否则{
h:=fmt.Sprintf(“%d”,c.h)
}
返回fmt.Sprintf(“%s:%s”,h,m)
}
我得到的错误是:

语法错误:名称意外,上面的
h字符串应为分号或换行符或}

知道这是怎么回事吗?我想我可以简单地使用一个临时变量来格式化需要声明的int值:

var h string
var m string
当影响
h
m
的值时,不要使用
:=
,而是使用
=
(或者您只在它们的内部范围内定义它们,而不是重用以前定义的变量)

如果c.m<10{
m=fmt.Sprintf(“0%d”,c.m)
}否则{
m=fmt.Sprintf(“%d”,c.m)
}
如果c.h<10{
h=fmt.Sprintf(“0%d”,c.h)
}否则{
h=fmt.Sprintf(“%d”,c.h)
}
完整示例:

输出:
您好,操场02:08
您需要声明:

var h string
var m string
当影响
h
m
的值时,不要使用
:=
,而是使用
=
(或者您只在它们的内部范围内定义它们,而不是重用以前定义的变量)

如果c.m<10{
m=fmt.Sprintf(“0%d”,c.m)
}否则{
m=fmt.Sprintf(“%d”,c.m)
}
如果c.h<10{
h=fmt.Sprintf(“0%d”,c.h)
}否则{
h=fmt.Sprintf(“%d”,c.h)
}
完整示例:


输出:
Hello,操场02:08
声明
字符串
方法变量一次(
var
)。不要用简短的变量声明(
:=
)重新声明它们。比如说,

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() {}
主程序包
输入“fmt”
类型时钟结构{
h int
密特
}
func(c*时钟)字符串()字符串{
变量(
h字符串
m字符串
)
如果c.m<10{
m=fmt.Sprintf(“0%d”,c.m)
}否则{
m=fmt.Sprintf(“%d”,c.m)
}
如果c.h<10{
h=fmt.Sprintf(“0%d”,c.h)
}否则{
h=fmt.Sprintf(“%d”,c.h)
}
返回fmt.Sprintf(“%s:%s”,h,m)
}
func main(){}
参考资料:


声明
字符串
方法变量一次(
var
)。不要用简短的变量声明(
:=
)重新声明它们。比如说,

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() {}
主程序包
输入“fmt”
类型时钟结构{
h int
密特
}
func(c*时钟)字符串()字符串{
变量(
h字符串
m字符串
)
如果c.m<10{
m=fmt.Sprintf(“0%d”,c.m)
}否则{
m=fmt.Sprintf(“%d”,c.m)
}
如果c.h<10{
h=fmt.Sprintf(“0%d”,c.h)
}否则{
h=fmt.Sprintf(“%d”,c.h)
}
返回fmt.Sprintf(“%s:%s”,h,m)
}
func main(){}
参考资料:


太棒了。这成功了,谢谢!当它允许我的时候,我会把它标记正确。太棒了。这成功了,谢谢!我会在它允许的时候把它标记正确。当然,除了学习一点之外,你应该使用这个软件包。是的。我让人告诉我如何将其简化为fmt.Sprintf(“%02d:%02d,c.m/60,c.m%60),我只需在几分钟内保存所有内容。当然,除了学习一点,你还应该使用这个软件包。是的。我让人告诉我如何将其简化为fmt.Sprintf(“%02d:%02d,c.m/60,c.m%60),我只需在几分钟内保存所有内容。