Golang Playground 示例:Lscyy3dKXLh 代码分享

Golang Playground 示例:Lscyy3dKXLh 代码分享 链接

我漏掉了什么。为什么…

fmt.Printf("%T\n", a)
fmt.Printf("%T\n", b)
fmt.Printf("%T\n", c)

…会输出…

int
float64
string

…?

15 回复

谢谢!

更多关于Golang Playground 示例:Lscyy3dKXLh 代码分享的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


有趣。"\n"是什么意思?

第一段非常有帮助。

第二段很有趣

非常有用!

它开始一条评论。

%T 表示变量的类型

a := 1 默认将 a 声明为 int 类型,而 b := 1.1 默认将 b 声明为 float64 类型

我有点理解但又不完全明白。 那么,当你说"默认"时,这是否意味着Go已经预设或预定义好的内容?

是的,这非常有帮助 学习 Go 教程 https://www.welookups.com/go/default.html

在"i := 42 // int"中,"//int"是对前面代码的注释吗?但不是程序的一部分?

i := 42      // int

“//” 是什么意思?

请多包涵,我就像个学说话的婴儿。 😂

正确。编译器会忽略以//开头的同一行中的所有内容,直到该行结束。

https://golang.org/ref/spec#Comments

我知道你刚开始学习,但我建议你尽快(这也适用于所有人)习惯查阅官方规范来获取确切答案。与其他语言相比,Go语言的规范出奇地易读!注释是所有编程语言中最简单的部分之一,因此这是一个很好的起点。

它代表"换行符"。简单来说,这意味着你的 fmt.Printf() 语句会输出:

int float64 string

而不是

intfloat64string

去掉 /n 试试看。😉

推荐阅读:http://www.golang-book.com/books/intro

或者如果你不介意花点钱,可以找O’Reilly出版的《Introducing Go》这本书。对于刚开始学习Go和编程的人来说,这是一本很好的入门书籍。

根据Go语言教程:

但当右侧包含无类型数值常量时,新变量的类型可能是int、float64或complex128,具体取决于常量的精度:

i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

您可以在Playground(采用32位架构)上验证这一点,可以看到1.1是float64类型,1是int类型,而int的大小是4字节(32位):https://play.golang.org/p/zfxE6sauGnD

cherilexvold1974:

当你说"默认"时,这是否意味着预设或预定义的内容?

据我所知,这是一种约定俗成的规则,1 是 int 类型,1.1 是 float64 类型 - 可以在 Go 教程关于字面量数据类型的部分看到:Go 语言之旅

我不太确定的是,在 64 位机器上 h:= 1.1 是 float64 类型,在 32 位机器上是否会是 float32 类型。有人能帮忙解答这个问题吗?

这个输出结果是由Go语言中变量声明和初始化的类型推导机制决定的。让我分析一下代码中的变量声明:

package main

import "fmt"

func main() {
    a := 42
    b := 42.0
    c := "42"
    
    fmt.Printf("%T\n", a)  // 输出: int
    fmt.Printf("%T\n", b)  // 输出: float64  
    fmt.Printf("%T\n", c)  // 输出: string
}

类型推导规则解释:

  1. a := 42 - 当使用整数字面量(不带小数点)时,Go会推导为 int 类型
  2. b := 42.0 - 当使用带小数点的字面量时,即使小数部分为0,Go也会推导为 float64 类型
  3. c := "42" - 使用双引号的字面量会被推导为 string 类型

这是Go语言编译器的标准行为。如果你想明确指定不同的数值类型,需要使用显式类型声明:

package main

import "fmt"

func main() {
    // 显式类型声明示例
    var a int32 = 42
    var b float32 = 42.0
    var c string = "42"
    
    fmt.Printf("%T\n", a)  // 输出: int32
    fmt.Printf("%T\n", b)  // 输出: float32
    fmt.Printf("%T\n", c)  // 输出: string
}

或者使用类型转换:

package main

import "fmt"

func main() {
    a := int32(42)
    b := float32(42.0)
    c := "42"
    
    fmt.Printf("%T\n", a)  // 输出: int32
    fmt.Printf("%T\n", b)  // 输出: float32
    fmt.Printf("%T\n", c)  // 输出: string
}

代码的输出完全符合Go语言规范,没有任何遗漏或错误。

回到顶部