误解Go中:=的用法

误解Go中:=的用法,go,Go,我正在阅读并看到以下片段: :=语法是声明和初始化变量的简写形式,例如,在本例中为var f string=“short” 问题是:它只适用于字符串吗?或者它的动态性足以理解它应该存储什么数据类型 另外:它不是与var f=“short”相同吗?当然,它推断了右侧表达式返回的明显类型 报告列举了这些例子: i, j := 0, 10 f := func() int { return 7 } ch := make(chan int) r, w := os.Pipe(fd) // os.Pipe(

我正在阅读并看到以下片段:

:=语法是声明和初始化变量的简写形式,例如,在本例中为var f string=“short”

问题是:它只适用于字符串吗?或者它的动态性足以理解它应该存储什么数据类型


另外:它不是与
var f=“short”
相同吗?

当然,它推断了右侧表达式返回的明显类型

报告列举了这些例子:

i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
r, w := os.Pipe(fd)  // os.Pipe() returns two values
_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate

请注意,它不是动态的:一切都发生在编译时,类型由正确的部分表达式给出。

它不是动态的,它是“类型推断”,我建议您将语言规范标记为书签。当你有这样的问题时,这是一个很好的研究的地方::)@Omie谢谢你关于规范参考的信息:我只是不明白为什么投了反对票。有人能给我解释一下吗?请注意,这种“类型推断”实际上并不需要编译器的任何智能——右边的表达式显然已经有了一个定义良好的类型推断“变量类型”基本上只意味着将类型从rhs复制到lhs。
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
r, w := os.Pipe(fd)  // os.Pipe() returns two values
_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate