【Hello Go】Go语言基础类型

news2025/1/12 17:22:28

Go语言基础类型

  • 基础类型
    • 命名
    • 变量
      • 变量声明
      • 变量初始化
      • 变量赋值
      • 匿名变量
    • 常量
      • 字面常量
      • 常量定义
      • iota枚举
    • 基础数据类型
      • 分类
    • fmt包的标准输入输出
      • 格式说明
      • 输入
      • 类型转换
      • 类型取别名

基础类型

命名

Go语言中的命名遵循下面的几个规则

  • 必须以字母或者是下划线开头
  • 不能使用Go语言中的关键字 或者是预定义的名字
  • 大小写表示的含义不同

Go语言中的关键字有下面25个

在这里插入图片描述

此外还有大约30多个预定义的名字

在这里插入图片描述
在这里插入图片描述

变量

变量就是程序运行中可以变化的量 它是所有编程语言的最基本组成元素

从根本上来说 变量就是对于一块空间的重命名 程序可以通过指针或引用等方式来修改该空间的内容 从而达到修改变量的效果

变量声明

Go语言和C/C++的变量声明有很大的不同

对于纯粹的变量声明 Go语言引入了一个关键字 var

而类型的信息放在变量名之后(类似于mysql的变量声明 )

示例如下

package main     
    
import "fmt"    
    
func main(){    
  // 定义单个变量    
  var v1 int     
  var v2 int     
    
  // 一次定义多个变量 方式一    
  var v3 , v4 int     
  // 方式二    
  var (    
    v5 int     
    v6 int    
  )    
    
  fmt.Println(v1 , v2 , v3 , v4 , v5 , v6)                                                     
} 

需要注意的是 如果在Go语言中只声明 不定义 编译的时候也会报错

变量初始化

如果我们声明的变量需要初始化 我们var关键字依然可以保留 但是此时的var关键字不再是必要的元素了

package main    
    
import "fmt"    
    
func main(){    
  var a int = 10 // 初始化方式一  var 和 int都不省略    
  b int = 20 // 初始化方式二 省略var关键字    
  var c = 30 // 初始化方式三 编译器自动推导c的类型     
  d := 40 // 初始化方式四 编译器自动推导类型                                                        
} 

我们这里需要注意的是最后一种初始化方式

当我们使用 := 来初始化的时候有两点需要注意

  • 表达式左边必须要是未声明的变量
  • 定义时必须初始化

否则就会报错

变量赋值

变量赋值这块其实和C++中的赋值没有太大区别 语法也很常规

  var a int                                     
  a = 10;  // 常规赋值                          
                                                
  var b , c , d  int                           
  b , c, d = 20 , 30 , 40  // 多重赋值    

匿名变量

匿名变量是Go语言中很有意思的一个变量 它的变量名一般是下划线

交给下划线的值会被丢弃

它的用法如下

_, i, _, j := 1, 2, 3, 4

func test() (int, string) {
return 250, "sb"
}

_, str := test()

如果我们不想要函数返回值中的某些值 但是我们又必须要接受它 此时我们就可以使用匿名变量来解决

很多同学可能看到test函数有两个返回值而感到惊讶 没错 在Go语言中函数可以返回多个返回值 这也是Go语言的特点之一

常量

在Go语言中 常量是指在编译期间就确定 并且不可改变的值

常量可以是数值类型 布尔类型 字符串类型等

字面常量

一般是指程序中硬编码的常量 比如

  _ = 3.12     
  _ =3                                                                                              
  _ = "hello"    
  _ = true 

注意 我们这里使用匿名变量的原因其实上面也说过了 因为go语言不允许常量或者变量未使用

常量定义

Go语言定义常量的关键字和C++一样 也是const

并且const关键字也是放在最前面修饰

代码表示如下

const  a int = 20 

需要注意的是 我们常量定义时不能够使用var关键字

iota枚举

常量声明可以使用iota常量生成器初始化 它用于生成一组以相似规则初始化的常量

它有下面几个特点

  1. 在第一个常量所在的行 iota 它将会被设置为0 (注意这里说的是行 也就是说 只要是同一行 值就是一样的 这个后面代码会演示)
  2. 每往后一行的常量声明 iota值加一
  3. 在碰到下一个const时候 iota值会被重置为0
  4. iota在一组声明中可以省略

下面我们会用代码依次验证上面的概念

iota生成器会依次加一

func test4(){    
  const (    
    a = iota     
    b = iota                                                                                        
    c = iota     
  )    
    
  fmt.Println(a , b, c)    
} 

在这里插入图片描述

iota在一组声明中可以省略

  const (                         
    a = iota                      
    b = iota                      
    c = iota                      
    d    // 这里省略了 iota 其实 b c后面的 iota也可以省略                                           
  )                                                           
    
  fmt.Println(a , b, c , d)   

在这里插入图片描述

在碰到下一个const时候 iota值会被重置为0

  const (    
    a = iota     
    b = iota     
    c = iota     
    d    // 这里省略了 iota 其实 b c后面的 iota也可以省略    
  )    
    
  const e = iota     
    
  fmt.Println(a , b, c , d , e)   

在这里插入图片描述

只要是同一行 值就是一样的

func test4(){    
  const (    
    a = iota     
    b = iota     
    c = iota     
    d    // 这里省略了 iota 其实 b c后面的 iota也可以省略    
  )    
    
  const e = iota     
    
  const f , g, h = iota , iota , iota                                                               
  fmt.Println(a , b, c , d , e , f , g, h)    
} 

在这里插入图片描述

基础数据类型

分类

Go语言的基础数据类型和C++差不多 唯一值得说的也就是一个布尔类型和一个复数类型

bool类型

package main

import "fmt"


func test(){
  var a bool 
  a = true;

  fmt.Println(a)
}


func main(){
  test()
}

需要注意的是 在Go语言中 bool类型的数据只能被赋值true或者false 不能被赋值整形数据 否则会报错

	var a bool
	a = true

	a = 1 // 报错

复数类型

复数由两个实数 在计算机中由浮点数组成 一个表示实部 一个表示虚部

它有下面几种定义方式

func test2(){
  var v1 complex64 
  v1 = 3.2 + 12i
  v2 := 3.2 + 12i
  v3 := complex(3.2 , 12) // 注意 这是不是12i 而是12

  fmt.Println(v1 , v2 , v3)
}

此外我们可以通过 real 和 imag函数来获取一个函数的实部和虚部

  fmt.Println(real(v1) ,  imag(v1)) // 我们可以使用real 和 imag来获取一个复数的实部 和 虚部

fmt包的标准输入输出

格式说明

格式含义
%b输出二进制数字
%%只输出一个%
%c输出一个字符
%T输出Go语法输出值的类型
%t输出bool类型

使用方式如下

	// 整形
	a := 15
	fmt.Printf("a = %b\n" , a) // %b 二进制 1111
	fmt.Printf("%%\n") // 只输出一个%

输入

我们在Go语言中一般会使用Scan函数来进行输入

func test2(){
	// 演示输入
	var a int 

	fmt.Println("请输入一个整数")
	fmt.Scan(&a)
	fmt.Println(a)
}

类型转换

Go语言中不允许隐式类型转换 所有的类型转换必须显示声明

代码如下

	// 类型转换 
	// Go语言中不允许隐式类型转换 所有类型转换必须显式声明
	var a int 
	a = 3.14  // err

如果我们想要类型转换必须要显示的强制转换

	var a int 
	// a = 3.14  // err
	var ch byte = 97
	a = int(ch) // correct

类型取别名

在Go语言中 我们使用type关键字来给一个类型取别名

代码表示如下

	type bigint int // 给int取别名bigint

	var a bigint = 20

如果想一次性给多个类型取别名我们可以这么做

	type(
		bigdouble double
		tinyint int8
	)

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

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

相关文章

C/C++---------------LeetCode第1394.找出数组中的幸运数

找出数组中的幸运数 题目及要求暴力算法哈希算法在main里使用 题目及要求 在整数数组中,如果一个整数的出现频次和它的数值大小相等,我们就称这个整数为「幸运数」。 给你一个整数数组 arr,请你从中找出并返回一个幸运数。 如果数组中存在…

过滤器模式 rust和java的实现

文章目录 过滤器模式实现 过滤器模式实现javarustjavarust rust代码仓库 过滤器模式 过滤器模式(Filter Pattern)或标准模式(Criteria Pattern)是一种设计模式,这种模式允许开发人员使用不同的标准来过滤一组对象&…

C++ opencv基本用法【学习笔记(九)】

这篇博客为修改过后的转载,因为没有转载链接,所以选了原创 文章目录 一、vs code 结合Cmake debug1.1 配置tasks.json1.2 配置launch.json 二、图片、视频、摄像头读取显示2.1 读取图片并显示2.2 读取视频文件并显示2.3 读取摄像头并写入文件 三、图片基…

C# 之 选择并调用文件[winform]

winform 之 选择并调用文件 在 form.cs[设计] 文件中选择一个button, 然后设置一个点击函数 将下方内容复制到函数中执行 private void push_btn_Click(object sender, EventArgs e){ // 1. 打开文件管理器选择文件OpenFileDialog openFileDialog1 new OpenFileDialog(); /…

【数电】IEEE754浮点数

IEEE754浮点数 1.组成及分类2.计算(1)符号位(2)阶码(3)尾码(4)实际计算公式 1.组成及分类 (1)组成 IEEE754浮点数由三部分组成:符号位、阶码和尾码。 (2)分类 根据数据位宽分为三类:短浮点数、长浮点数和…

PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)

背景 是在store的后台添加一个页面,显示的如满意度调查的页面 在router.config.js里面配置一个新的菜单 路径:yoshop2.0-store\src\config\router.config.js 代码如下,很简单,定义了这菜单点击的时候进入的页面,和下面…

Donut 中,video组件层级失效、同层渲染失效、z-index设置无效解决办法

微信小程序转安卓之后,z-index设置的层级关系失效,video组件总是处在最上层解决办法: 很重要的设置! 同层渲染要开 xweb,project.miniapp.json中勾选此设置 感谢腾讯官方大佬 黄嘉敏

【Git】的分支与版本

前言 Git 的分支是指将代码库从某一个特定的提交记录开始的一个独立的开发线,也可以理解为是一种代码开发的并行方式。分支在 Git 中的使用非常广泛,它可以让多人在同一个代码库中并行开发,同时也能够很方便地进行代码版本控制和管理。 Git …

PM2学习

目录 PM2简介 pm2的主要特性 PM2安装 启动PM2项目 查看应用列表(查看当前机器执行的所有进程) 查看某个应用详情 重启 停止 删除 日志查看 负载均衡 监控CPU/内存 内存使用超过上限自动重启 监听代码变化/自动重启 PM2简介 PM2是常用的node…

什么是OpenCL?

什么是OpenCL? 1.概述 OpenCL(Open Computing Language 开放计算语言)是一种开放的、免版税的标准,用于超级计算机、云服务器、个人计算机、移动设备和嵌入式平台中各种加速器的跨平台并行编程。OpenCL是由Khronos Group创建和管理的。OpenCL使应用程序…

modbus-RTU是一种比较简单、可靠的协议

modbus-RTU是一种比较简单、可靠的协议 RTU, 是modbus中的一种应用层协议,在OSI的第七层 数据格式 应用

[C国演义] 第二十章

第二十章 最长回文子序列让字符串成为回文串的最少插入次数 最长回文子序列 力扣链接 单个数组讨论子序列 ⇒ dp[i] -- 以nums[i]为结尾的所有子序列中, 回文子序列的最长长度. 然后讨论 最后一个位置的归属情况 但 又要满足 回文结构 ⇒ 二维dp ⇒ dp[i][j] -- 区间[i, j]内…

类加载器(classloader)

作者:ZeaTalk 链接:https://www.zhihu.com/question/49667892/answer/690161827 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 类加载器(classloader) 先从类加载器…

【数据结构】直接插入排序

👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:数据结构 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有帮助…

第八章:枚举

系列文章目录 文章目录 系列文章目录前言一、枚举总结 前言 类可以作为常量使用。 一、枚举 枚举是一组常量的集合。可以这里理解: 枚举属于一种特殊的类, 里面只包含一组有限的特定的对象。 枚举的实现方式自定义类实现枚举使用 enum 关键字实现枚举…

MySQL 分库分表与 TiDB(平凯数据库),如何选择?

随着互联网行业的飞速发展,数据量不断增长,传统的关系型数据库已经无法满足大规模数据处理的需求。为了解决这一问题,分库分表和分布式数据库应运而生。本文将对比分析 MySQL 分库分表和 TiDB 这两种解决方案,帮助大家更好地选择适…

自动化测试和手工测试有什么不同以及自动化测试和手工测试应用范围的对比

一、初识自动化测试 如果以前没有做过自动化测试,那么就不了解自动化测试,可能会觉得自动化测试比较神秘,但是,我们在日常的计算机操作中,可能会碰到一些自动化处理的过程,这些过程和自动化测试比较接近。 …

Mysql修改事务隔离级别及与spring隔离级别关系

Mysql如何修改事务隔离级别 1.查询事务级别 1.1查询全局事务隔离级别 select global.tx_isolation; 1.2 查询当前会话事务隔离级别 select session.tx_isolation; 2.修改事务隔离级别 2.1 修改全局事务隔离级别 set global transaction isolation level read committed;…

Kafka 的应用场景

Kafka 是一个开源的分布式流式平台,它可以处理大量的实时数据,并提供高吞吐量,低延迟,高可靠性和高可扩展性。 Kafka 最初是为分布式系统中海量日志处理而设计的。它可以通过持久化功能将消息保存到磁盘,并让消费者按…

景联文科技入选量子位智库《中国AIGC数据标注产业全景报告》数据标注行业代表机构TOP20

量子位智库《中国AIGC数据标注产业全景报告》中指出,数据标注处于重新洗牌时期,更高质量、专业化的数据标注成为刚需。未来五年,国内AI基础数据服务将达到百亿规模,年复合增长率在27%左右。 基于数据基础设施建设、大模型/AI技术理…