go基本数据类型、变量、常量

标识符
例如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。例如abc,_ ,_123,a123。
基本数据类型
Go语言中有丰富的数据类型,除了基本的整型、浮点型、复数、布尔型、字符串、byte、rune外,还有数组、切片、结构体、函数、map、通道(channel)等。
这些类型都在builtin.go文件中,这个包含go的预声明定义包含常用的各种类型和方法声明,包括变量和常量两部分,大家可以自己查阅一下。
整型
有符号(带正负的)整型:int8(0-2^8-1以此类推)、int16、int32、int64
无符号(只有正)整型:uint8(-128-127总共2^8个以此类推)、uint16、uint32、uint64
默认的有无符号整型类型为int和unit;
int有点特殊它是根据你电脑操作系统来区分是几位的
32位操作系统上就是int32,64位操作系统上就是int64;
unit类似
浮点型
float32和float64
//打印π的前两位
fmt.Printf("%.2f\n", math.Pi)
复数
关于什么是复数的问题,这是初中的东西老子忘了,不过分吧。
complex64和complex128
var c1 complex64
c1 = 1 + 2i
var c2 complex128
c2 = 2 + 3i
复数有实部(就是整数那部分)和虚部(就是×i那部分),complex64的实部和虚部为32位,complex128的实部和虚部为64位。
布尔
true和false没什么好说的
字符串
这里看到string,想必学java的大家可能会有点疑问,其实严格意义上来说go不算是面向对象语言,官方给出的解释则是Yes and no,没错是又不是,这里留个彩蛋等我们之后的文章会更新。
字符串内部用UTF-8编码
var name string = “孙嵓”
在这里插入图片描述
byte和rune
byte 类型,代表了ASCII码的一个字符,本质是一个unit8。
rune类型,代表一个 UTF-8字符,本质是个int32。
给我的感觉就是java的char类型,好理解一点。。。
遍历字符串
str := “hello北京”
for _ , r:= range str{
fmt.Println®
}
for i , r:= range str{
fmt.Println(i,string®)
}
//不加string()强转将输出unicode值,最终打印效果
0 h
1 e
2 l
3 l
4 o
5 北
8 京
知识点:range
range关键字用于for循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在字符串、数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

关于基本类型先分享到这其他的类型在后续碰到了我们在详细讨论。

类型转化
强制类型转换
表达式:
类型(表达式)
//例如float64与int之间的转换
var a int = 1
b := int(float64(a))
例子修改字符串:
func changeString() {
s1 := “big”
// 强制类型转换
byteS1 := []byte(s1)
byteS1[0] = ‘p’
fmt.Println(string(byteS1))

s2 := “孙嵓”
runeS2 := []rune(s2)
runeS2[0] = ‘牛’
fmt.Println(string(runeS2))
}
int与string相互转换(很常用very关键)
需要引入strconv包,此包主要用于基本数据类和其字符串表示的相互转换。

  1. int转string
    n := 1
    //第一种
    fmt.Sprintf("%d",n)
    //第二种
    //翻看源码查看其实就是调用的FormatInt,内部将int转成了int64
    strconv.Itoa(n)
    //第三种
    //必须是64位int类型,第二个参数是几进制
    var n int64 = 1
    strconv.FormatInt(n,10)
  2. string转int
    x, _ := strconv.Atoi(n2)
    //这个方法我们可以点进源码
    b: = “1”
    z, _ := strconv.ParseInt(b,10,32)
    //源码是这样的
    //@param s 字符串表示的整数值
    //@param base (2-36进制)base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制
    //@param bitSize 整数类型(0、8、16、32、64 分别代表 int、int8、int16、int32、int64)
    func ParseInt(s string, base int, bitSize int) (i int64, err error) {

    }
    注意:如果语法有误,err.Error = ErrSyntax;如果结果超出类型范围err.Error = ErrRange,作为出参返回
    变量和常量
    Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明,并且Go语言变量声明后必须使用。
    变量声明及初始化
    以关键字var开头(与js类似),变量类型放在变量后,行尾不需要分号
    var 变量名 变量类型
    //例如
    var name string = “孙嵓”
    //也可初始化多个变量
    var name, age = “孙嵓”, 18
    go还支持批量变量声明
    var (
    sex = “男”
    height = 188
    )
    go支持短变量声明,注意此类声明只针对函数内部的局部变量使用
    name := “孙嵓”
    go支持匿名变量,当想忽略某个值的时候,用一个下划线_来表示,如下
    (具体的使用场景就是,方法返回了多个值,但其中的值后续用不到我们就可以用匿名变量,匿名变量是不占用命名空间不会分配内存)
    func getName()(string,string){
    return “孙嵓”,“男”
    }
    func main(){
    name, _ := getName()
    _, sex := getName()
    fmt.Println(name + sex)
    }
    //out
    //孙嵓男
    类型推导
    类似楼上声明变量不带数据类型,编译器会根据右边的值来推导变量的类型完成初始化。
    一个字牛逼!
    常量声明及初始化
    常量可理解为恒定不变的值,用于程序运行期间不会改变的那些值(你在函数内部重新给他赋值ide会报错的,这也是跟var变量的一区别)
    const name = “孙嵓”
    常量也支持批量声明
    const (
    sex = “男”
    height = “188”
    )
    //类似这种形式n2,n3都会被赋值为100;变量批量声明没有这种形式
    const (
    n1 = 100
    n2
    n3
    )
    总结回顾
    变量和常量的区别
    声明关键字不同,常量用的是const,变量用的是var
    常量必须赋值,变量可以不赋值但是必须加类型(这种var name string)
    在函数内部重新给常量赋值ide会报错的,变量不会
    常量在函数中未引用不会报错,变量会
    常量批量声明可以设置头一个值批量赋值,变量不可以
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙嵓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值