无法将类型“bool”隐式转换为“int”_Go 语言学习之基础数据类型

本文介绍了 Go 语言中的基础数据类型,包括整数类型(有符号和无符号,以及 int 和 uint 类型)、浮点数类型(float32 和 float64)、布尔类型(bool,其值为 true 和 false,且不能隐式转换为数值)和字符串类型(不可变,以字节序列表示,支持 len 函数、下标访问和子串生成)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cb6c6b403f8d82a44550a5b8eafc5156.png

01

整数类型

整数类型按照有/无符号划分,可分为有符号整数和无符号整数,二者按照大小划分,有 8 位、16 位、32 位和 64 位:

大小8 位16 位32 位64 位
有符号int8int16int32int64
无符号uint8uint16uint32uint64

此外,还有两种整数类型,分别是 int 和 uint,其大小与原生的有/无符号整数类型相同,都是 32 位或 64 位。

其中,int32 和 uint8 分别有类型别名是 rune 和 byte,二者可互换使用。需要注意的是,int 和 uint 都有别于大小明确的类型,也就是说,int 和 int32 是两种不同的类型,必须显示转换。

var a intvar b int32var c runevar d bytevar e uint8func main() {  fmt.Printf("a=%d type:%T\n", a, a)  fmt.Printf("b=%d type:%T\n", b, b)  fmt.Printf("c=%d type:%T\n", c, c)  fmt.Printf("d=%d type:%T\n", d, d)  fmt.Printf("e=%d type:%T\n", e, e)  if c == b {    fmt.Println("rune 类型是 int32 的类型别名,二者可以互换使用")  }  if d == e {    fmt.Println("byte 类型是 uint8 的类型别名,二者可以互换使用")  }}

02

浮点数类型

浮点数类型有两种,分别是 float32 和 float64,大多数情况下,建议优先使用 float64,因为 float32 的运算容易产生误差。

var f float32var g float64func main() {  fmt.Printf("f=%g type:%T\n", f, f)  fmt.Printf("g=%g type:%T\n", g, g)}

03

布尔类型

bool 型的值只有两种可能,true 和 false,在 Go 语言中,bool 型的零值是 false,布尔值无法隐式转换成数值 0 或 1,反之亦然。

var h boolfunc main() {  fmt.Printf("h=%t type:%T\n", h, h)}

04

字符串类型

字符串是不可变的带双引号的字节序列,它可以包含任意数据,包括 0 值字节,不可变意味着多个字符串可以共享一块内存空间。

如图所示,同一块内存空间,包含字符串 s 、字符串 hello 和字符串 world。

4cfb787117bee004c3dc8ee1e9f0f550.png

字符串操作:

  • len 函数

    内置的 len 函数返回字符串的字节数,并非字符的个数,UTF-8 的简体中文,一个字符占三个字节。

  • 下标访问字符

    通过下标访问字符串,可以得到第 i 个字符。

  • 子串生成

    子串生成操作 s[i:j] 产生一个新字符串,内容取自原字符串的字节,下标从 i (含边界值)开始,直到 j(不含边界值)。新字符串的大小是 j-i 个字节。

    需要注意的是,如果下标越界,或者 j 的值小于 i,将触发宕机异常。

    操作数 i 和 j 的默认值分别是 0 [字符串的起始位置]和 len(s) [字符串的终止位置],如果省略 i 或 j,或两者都省略,则取默认值。

  • 字符串连接

    加号(+)运算符连接两个字符串而生成一个新字符串。

var i stringfunc main() {  fmt.Printf("i=%s type:%T\n", i, i)    i = "hello golang"  fmt.Printf("字符串 i 的长度:%d\n", len(i))  fmt.Printf("字符串 i 的第一个字符:%c\n", i[0])  j := i[0:5]  fmt.Printf("子字符串 j 的值:%s\n", j)  k := i[5:]  fmt.Printf("子字符串 k 的值:%s\n", k)  l := i[:5]  fmt.Printf("子字符串 l 的值:%s\n", l)  m := i[:]  fmt.Printf("子字符串 m 的值:%s\n", m)  n := "hello "  o := "world"  p := n + o  fmt.Printf("连接字符串 p 的值:%s\n", p)}

完整代码:

d15cf9cd9152a4c2ef1d7153fc233f3a.png

输出结果:

a=0 type:intb=0 type:int32c=0 type:int32d=0 type:uint8e=0 type:uint8f=0 type:float32g=0 type:float64h=false type:booli= type:stringrune 类型是 int32 的类型别名,二者可以互换使用byte 类型是 uint8 的类型别名,二者可以互换使用字符串 i 的长度:12字符串 i 的第一个字符:h子字符串 j 的值:hello子字符串 k 的值:golang子字符串 l 的值:hello子字符串 m 的值:hello golang连接字符串 p 的值:hello world

5d84ff2186e0b563e6e607cf17aaef1b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值