go语言 类型和常量

go语言 类型和常量

一、基础类型

Go语言是一种静态类型语言,这意味着所有变量的类型在编译时必须明确,并且一旦定义,类型就不能改变。

1.数字类型

  • 整数类型
    • int8:占1个字节,范围是-128127
    • int16:占2个字节,范围是-3276832767
    • int32:占4个字节,范围是-21474836482147483647
    • int64:占8个字节,范围是-92233720368547758089223372036854775807
    • int:根据平台不同,可以是int32int64
  • 正整数类型
    • uint8:占1个字节,范围是0255
    • uint16:占2个字节,范围是065535
    • uint32:占4个字节,范围是04294967295
    • uint64:占8个字节,范围是018446744073709551615
  • 浮点数类型
    • float32:32位浮点数。
    • float64:64位浮点数,通常用于需要高精度的计算
  • 复数类型
    • complex64:实部和虚部都是float32
    • complex128:实部和虚部都是float64
package mainimport "fmt"func main() {// 整数类型//var a int8 = 128 // 1. 超过范围报错var a int8 = 127var b int8 = 1fmt.Println(a + b) // 2. -128// 浮点数var c float32 = 1.555555555555555555 // 3. 1.5555556 只到小数点后七位var d float64 = 1.555555555555555555 // 4. 1.5555555555555556  到小数点后16位fmt.Println(c, d)//fmt.Println(c+d) // 5. 不同类型语言不能相加
}

2. 字符串、字节和字符类型

  • 字符串string,使用双引号"或反引号`` `定义。
  • 字节类型byte,等同于uint8,通常用于表示ASCII字符。
  • 字符类型rune,等同于int32,用于表示一个Unicode字符。
package mainimport "fmt"func main() {// 字符串//var a string = 'qwerty'  // 1. 单引号报错var a string = "qwerty" // 2. 使用双引号var b string = `真的假的
是真的?
是假的`fmt.Println(a)fmt.Println(b) // 3. 使用反引号// 字节类型//var c byte = 'Aa'  // 4. 长度超出,只能一个字节//var c byte = '周' // 5. 只能是ASCII所能表示的字符var c byte = 'A'fmt.Println(c)          // 6. 输出65fmt.Println(string(c))  // 7. 转换成字符输出 Afmt.Println(string(65)) // 7. 转换成字符输出 A// 字符类型var d rune = '周'fmt.Println(d)             // 8. 输出:21608fmt.Println(string(d))     // 9. 转换成字符输出:周fmt.Println(string(21608)) // 9. 转换成字符输出周
}

3. 布尔类型

  • 布尔类型bool,只有两个值:truefalse

二、常量

常量是指一旦被赋值后,其值就不能被改变的变量。Go语言的常量使用关键字const来定义。

  • 常量的定义和特性

    • 不变性:常量的值在初始化后不能被改变。

    • 作用域:常量的作用域限定在其定义的地方,与函数或代码块内。

    • 类型:Go语言中的常量可以是任何类型,包括数字、字符串、布尔值等。

  • Go语言常量的使用

    • package mainimport "fmt"// 定义常量
      const school = "北京交大"func main() {// 访问全局常量fmt.Println(school) // 北京交大// 定义局部常量const school = "上海交大"fmt.Println(school) // 上海交大demo01()
      }func demo01() {fmt.Println(school) // 输出全局的常量 school 北京交大
      }
      
  • 补充说明

    • 声明关键字:使用const关键字来声明常量。

    • 可读性:常量名通常使用全大写字母表示,遵循Go语言的命名习惯。

    • 不能简短声明:定义常量时不需要使用:=简短声明语法,因为这会导致编译错误。

    • 编译时常量:Go语言的常量在编译时就已经确定,这使得编译器可以进行优化。

    • iota关键字:在Go语言中,iota是一个特殊的关键字,用于在定义一组相关常量时提供自动增量的值。

      • 示例

      • const (Monday = iota // Monday == 0Tuesday       // Tuesday == 1Wednesday     // Wednesday == 2// 以此类推...
        )
        

三、声明变量的几种方式

  1. 使用var关键字: 使用var可以声明一个或多个变量,并可选地初始化它们。

    var a int = 10
    var b, c string = "hello", "world"
    
  2. 短变量声明: Go语言提供了一种更简短的变量声明方式,使用:=操作符,这种声明方式会根据赋值的值自动推断变量的类型。

    a := 10
    b, c := "hello", "world"
    
  3. 在函数内部使用短变量声明: 短变量声明只能在函数内部使用,它是一种非常常见的变量声明方式,因为它可以减少代码量并提高可读性。

    func main() {a := 10fmt.Println(a)
    }
    
  4. 使用new函数new函数可以用于分配内存,并返回一个指针,指向新分配的类型为T的零值变量。

    var p *int = new(int)// 使用*操作符来访问指针指向的值,并赋值
    *p = 42
    // 打印指针指向的值
    fmt.Println(*p) // 输出: 42
    
  5. 使用类型转换声明变量: 如果需要声明一个变量并将其初始化为特定的类型,可以使用类型转换来实现。

    var a int = int(10.0) // 从float64转换为int
    
  6. 使用const声明常量: 虽然不是变量声明,但const用于声明编译时常量,其值在编译时就已确定,并且在运行时不可更改。

    const Pi = 3.14159
    
  7. 多重赋值: Go语言支持多重赋值,这可以用来一次性声明和初始化多个变量。

    a, b := 1, 2
    
  8. 使用...进行可变参数传递: 在函数中,可以使用...操作符来接收不定数量的参数,这些参数被存储在一个底层为数组的变量中。

    func sum(args ...int) int {total := 0for _, arg := range args {total += arg}return total
    }
    
  9. 匿名结构体字面量: 当需要创建一个结构体实例但不想显式定义结构体类型时,可以使用匿名结构体字面量。

    var person = struct {Name stringAge  int
    }{Name: "John Doe",Age:  30,
    }
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1473656.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

《梦醒蝶飞:释放Excel函数与公式的力量》9.2 FV函数

9.2 FV函数 FV函数是Excel中用于计算投资或贷款在若干期后的未来值的函数。它是一个非常实用的财务函数,能够帮助我们快速计算投资的最终价值或贷款的期末余额。 9.2.1 函数简介 FV函数用于计算基于定期固定支付和固定利率的投资或贷款的未来值。未来值是指在一定…

【电商纯干货分享】干货速看!电商数据集数据API接口数据分析大全!

数据分析——深入探索中小企业数字化转型,专注提供各行业数据分析干货、分析技巧、工具推荐以及各类超实用分析模板,为钻研于数据分析的朋友们加油充电。 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中&#xff09…

初学嵌入式是弄linux还是单片机?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!1、先入门了51先学了89c52…

白嫖A100-interLM大模型部署试用活动,亲测有效-2.Git

申明 以下部分内容来源于活动教学文档: Docs git 安装 是一个开源的分布式版本控制系统,被广泛用于软件协同开发。程序员的必备基础工具。 常用的 Git 操作 git init 初始化一个新的 Git 仓库,在当前目录创建一个 .git 隐藏文件夹来跟踪…

Linux|信号

Linux|信号 信号的概念信号处理的三种方式捕捉信号的System Call -- signal 1.产生信号的5种方式2.信号的保存2.1 core 标志位 2.信号的保存2.1 对pending 表 和 block 表操作2.2 阻塞SIGINT信号 并打印pending表例子 捕捉信号sigaction 函数验证当前正在处理某信号&#xff0c…

3-3 超参数

3-3 超参数 什么是超参数 超参数也是一种参数,它具有参数的特性,比如未知,也就是它不是一个已知常量。是一种手工可配置的设置,需要为它根据已有或现有的经验,指定“正确”的值,也就是人为为它设定一个值&…

Linux系统的服务——以Centos7为例

一、Linux系统的服务简介 服务是向外部提供对应功能的进程,其运行在系统后台,能够7*24小时持续不断的提供外界随时发来的服务请求,且服务进程常驻在内存中,具有固定的端口号,通过端口号就能找到服务内容。 提供服务的一…

2000-2022年地级市数字经济指数(含控制变量)

2000-2022年地级市数字经济指数(含控制变量) 目录 数字经济对区域经济发展的影响实证研究 一、引言 二、文献综述 三、数据来源与变量说明 四、实证模型 五、程序代码与运行结果 数字经济对区域经济发展的影响实证研究 摘要: 本文旨在…

Ubuntu防火墙相关内容

Ubuntu防火墙相关的命令,主要用于日常使用过程中,忘记命令时查找方便,不用再去各种地方搜索了。以下命令均已root用户执行,如果是非root用户,需要添加sudo 查看防火墙的启用状态 ufw status 说明是启用状态。 启用防…

Fish Speech: 开源文本转语音技术(TTS)的新里程碑

简介 Fish Speech 是一个全新的文本转语音(TTS)解决方案,该项目由fishaudio开发。当前模型使用约十五万小时三语数据训练,对中文支持非常的完美。 能够熟练处理和生成中文、日语和英语的语音,语言处理能力接近人类水平,并且声音…

代码随想录算法训练营第4天|LeetCode24,19,02,07,142

24.交换链表结点 题目链接:24. 两两交换链表中的节点 - 力扣(LeetCode) 文章链接:代码随想录 (programmercarl.com) 视频链接:代码随想录算法公开课 | 最强算法公开课 | 代码随想录 第一想法 正常模拟,先画…

算法金 | 欧氏距离算法、余弦相似度、汉明、曼哈顿、切比雪夫、闵可夫斯基、雅卡尔指数、半正矢、Sørensen-Dice

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 在算法模型构建中,我们经常需要计算样本之间的相似度,通常的做法是计算样本之间的距…

性价比蓝牙耳机排行榜前十名有哪些?十大性价比蓝牙耳机榜单盘点

作为使用真无线蓝牙耳机长达5-6年的资深爱好者,我始终对音频技术和产品的创新保持着浓厚的兴趣,最近,我投入了一笔不小的资金,超过大几千元,用于深入测试和评估市面上多款来自各大品牌的真无线蓝牙耳机(包括…

EtherCAT转Profinet网关配置说明第一讲:配置软件安装及介绍

网关XD-ECPNS20为EtherCAT转Profinet协议网关,使EtherCAT协议和Profinet协议两种工业实时以太网网络之间双向传输 IO 数据。适用于具有EtherCAT协议网络与Profinet协议网络跨越网络界限进行数据交换的解决方案。 本网关通过上位机来进行配置。 首先安装上位机软件 一…

用递归解决冒泡排序问题

冒泡排序是种很简单的排序方式. 如果用循环方式, 通常就是两层循环. 由于两层循环都是与元素个数 N 线性相关, 所以可以简单估算出它的时间复杂度是 O(N2), 通常而言, 这是较糟糕的复杂度. 当然, 这也几乎是所有简单方式的宿命, 想简单就别想效率高! 前面篇章说到递归也是一种循…

基于Java技术的人事管理系统

你好,我是专注于计算机科学领域的小野。如果你对人事管理系统感兴趣或有相关需求,欢迎私信交流。 开发语言: Java 数据库: MySQL 技术: B/S模式、Java技术、SpringBoot 工具: Eclipse、MySQL、浏览…

【C++:类的基础认识和this指针】

C的类与C语言的struct结构体有啥区别? 默认的访问限定符不同 类的简要 关键字:class{}里面是类的主体,特别注意:{}后面的;不可以省略类中的变量叫做成员变量,类中的函数叫做成员函数类中访问有三种访问权限…

HTML5使用<blockquote>标签:段落缩进

使用<blockquote>标签可以实现页面文字的段落缩进。这一标签也是每使用一次&#xff0c;段落就缩进一次&#xff0c;并且可以嵌套使用&#xff0c;以达到不同的缩进效果。语法如下&#xff1a; <blockquote>文字</blockquote> 【实例】使用<blockquote&…

谷粒商城----通过缓存和分布式锁获取数据。

高并发下缓存失效的问题 高并发下缓存失效的问题--缓存穿透 指查询一个一定不存在的数据&#xff0c;由于缓存是不命中&#xff0c;将去查询数据库&#xff0c;但是数据库也无此记录&#xff0c;我们没有将这次查询的不写入缓存&#xff0c;这将导致这个不存在的数据每次请求…

工厂模式之简单工厂模式

文章目录 工厂模式工厂模式分为工厂模式的角色简单工厂模式案例代码定义一个父类&#xff0c;三个子类定义简单工厂客户端使用输出结果 工厂模式 工厂模式属于创造型的模式&#xff0c;用于创建对象。 工厂模式分为 简单工厂模式&#xff1a;定义一个简单工厂类&#xff0c;根…