• go-变量


    变量使用注意事项

    变量三种声明方式

    var i int  //使用默认值
    		var num = 10.2  //类型推导
    		num := "tom" //左侧不能同名
    	//多变量声明
    		num,  i, str := 10.1, 5, "tom"
    	//一次性声明多个全局变量
    		var n1 = 1
    		var (
    	n3 = 5
    	n4 = 4
    )  //一次性声明
    
    • 在go函数外部定义的变量就是全局变量
    • 区域内的数据之可以在同一范围(包括统一数据类型)内不断变化(重点)
    • 变量在同一个作用域内不能重名(在一个函数或一个代码块中)
    • 变量=变量名+值+数据类型

    +的使用

    • 两边都是数字做加法运算
    • 两边都是字符串做字符串拼接

    数据类型(重点)

    数值类型,栈中存储

    1. 整型
      int8, int16 ,int32 ,int64
      uint8 uint16 uint32 uint64
      rune
      有符号,与int32一样,表示一个Unicode码
      byte
      无符号, 与uint8一样,当要存储字节时选用byte
      使用细节
      int uint大小与系统有关
      默认为int型
      查看字节大小和数据类型
      fmt.Printf("n 的类型为%T ",n)
      fmt.Printf("n占用的字节数为%d",unsafe.Sizeof(n))//需引入unsafe包
      变量正在使用是遵守保大不保小,在保证程序正常运行情况下,尽量使用较小的数据类型,如:年龄
      bit是最小的存储单元

    2. 小数类型
      float64
      float32
      浮点数=符号位+指数位+位数位
      尾数部分可能丢失,造成精度损失
      浮点数都是有符号的
      使用细节
      有固定的的字段长度和范围,不收os(操作系统)的影响
      默认64位,推荐使用64位
      科学计数法,十进制法
      字符类型
      golang中没有字符类型,要存储单个字符,一般用byte来保存
      go的字符串有字节组成
      字符输出
      0-255,(0-1,a-z.A-Z)可用byte,超过要用int,格式化输出即可

      var c1 = "a" byte
      fmt.Printf("c1=%c",c1)
      		var c2 int = "北"
      fmt.Printf("c2=%c,对应的ASCII至为%d",c2,c2) 
      

    使用细节
    转义字符
    字符采用UTF-8编码
    字符本质是一个整数,直接输出是utf-8编码值,所以需格式化输出
    字符通常用单引号括起来
    存储:字符--->对应码值--->二进制--->存储
    读取:二进制--->码值--->字符--->读取

    1. 布尔类型
      逻辑运算

    2. string类型

      	var str string = "我最帅!"
      fmt.Println(str)
      

    使用细节
    utf-8编码
    字符串一旦赋值了就不能在修改,go中字符串是不可变的
    字符串的两种表示
    双引号
    会识别转义字符
    单引号
    以字符串原生形式输出,包括转义字符,可现实防止攻击,输出源代码等效果
    字符串+进行拼接
    多行字符串+在每一行的末尾

    1. 数组

    2. 结构体

    3. 引用类型 (堆中存储当没有任何变量来引用他时,改地址对应的数据空间变成垃圾,由GC来回收)
      指针
      管道chan
      切片
      map
      interface

    类型转换

    go中无自动转换,必须显示转换

    var i float64 = 50.23
    var a int = float64(i)
    

    可以从小到大,也可以从大到小
    可能会溢出

    基本数据类型转string类型

    fmt.Sprintf("%参数",表达式) 返回转换后的内容
    函数说明
    func Sprintf根据format参数生成格式化字符串并返回该字符串

    var num int = 5
    str = fmt.Sprintf("%d",num1)
    fmt.Printf("str type %T   str = %q
    ",str,str)
    

    使用strconv包的函数

    var num int = 99
    var num2 float64 = 10.2
    var b2 bool = true
    
    str = strconv.FortmatInt(int64(num1),10)
    fmt.Printf("str = %q
    ",str,str)
    
    str = strconv.FormatFloat(num2, 'f', 10, 64)
    fmt.Printf("str = %q
    ",str ,str)
    
    str = strconv.Bool(b2)
    fmt.Printf("str = %q
    ",str ,str)
    

    还有一strconv.Itoa(int(num))
    也可以转字符串

    string转基本类型

    使用strconv包的函数
    bool类型
    b, _ = strconv.PraseBool(str)
    nt类型
    n1 , _ =strconv.PraseInt(str, 10, 64)
    float类型
    f1, _=strconv.PraseFloat(str, 64)
    因为strconv.PraseInt函数会返回两个值(value int, err error)
    我只要第一个所以忽略第二个
    具体用法可查看api文档
    注意事项
    转基本数据类型时要确保类型能转成有效的数据,如果没有转成功,会返回默认值0

    指针

    ​ var ptr *int = &num
    ​ 值类型都有对应的指针类型,形式为 *数据类型,而值类型包括基本数据类型

    标识符

    ​ _表示一个特殊标识符,称为空标识符,可带表其他任意标识符,所以只能占位使用,不能作为标识符使用
    ​ 包名:尽量保持package名和目录名一致,不要和标准库冲突
    ​ 首字母大写公开,小写私有

  • 相关阅读:
    FFT 和 NTT
    神秘构造题
    P4396 [AHOI2013]作业
    杜教筛学习笔记
    杜教筛
    「$mathcal{Darkbzoj}$」神犇和蒟蒻
    「CQOI2015」选数
    「$mathcal{Atcoder}$」$mathcal{ARC101}$
    「NOI2019」退役记???
    「李超线段树」
  • 原文地址:https://www.cnblogs.com/ygjzs/p/11779958.html
Copyright © 2020-2023  润新知