【Hello Go】Go语言基础类型

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
	)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Django——模板层、模型层

模板层 一. 模版语法 {{ }}: 变量相关 {% %}: 逻辑相关 1. 注释是代码的母亲 {# ... #} 2. 基本数据类型传值 int1 123 float1 11.11 str1 我也想奔现 bool1 True list1 [小红, 姗姗, 花花, 茹茹] tuple1 (111, 222, 333, 444) dict1 {username: jason, age: 18, i…

单片机的冷启动、热启动、复位

一文看懂STC单片机冷启动和复位有什么区别-电子发烧友网 单片机的冷启动、热启动和复位是不同的启动或重置方式,它们在系统状态和初始化方面有所不同: 1.冷启动(Cold Start): 定义: 冷启动是指系统从完全关…

第14届蓝桥杯青少组python试题解析:22年10月选拔赛

选择题 T1. 执行print (5%3) 语句后,输出的结果是 ( ) 0 1 2 3 T2. 以下选项中,哪一个是乘法运算符?() % // * ** T3. 已知x3,求x//2x**2的运算结果? 7.5 10 8 10.5 T4. 以下选项中,对下面程序的打印…

Unity地面交互效果目录

大家好,我是阿赵。   之前写了几篇关于地形交互、地面轨迹、脚印效果实现的博文。虽然写的篇数不多,但里面也包含了不少基础知识,比如局部UV采样、法线动态混合、曲面细分等知识,这些都是可以和别的效果组合在一起,做…

【刷题专栏—突破思维】142. 环形链表 II

前言:本篇博客将讲解三个OJ题,前两个作为铺垫,最后完成环形链表的节点的寻找 文章目录 一、160. 相交链表二、141. 环形链表三、142. 环形链表II 一、160. 相交链表 题目链接:LeetCode—相交链表 题目描述: 给你两个单…

排查线程阻塞问题

案例代码 package first;import java.util.concurrent.TimeUnit;public class DeadLock {private static volatile Object lock new Object();public static void main(String[] args) {new Thread(() -> {test1();}).start();new Thread(() -> {test2();}).start();}p…

队列的实现---超详细

队列的实现—超详细 文章目录 队列的实现---超详细一、队列的模型二、代码实现以及测试用例①队列初始化②入队③出队④输出队头⑤输出队尾⑥判断队列是否为空⑦队列的长度⑧队列的销毁⑨测试用例 一、队列的模型 队列:只允许在一端进行插入数据操作,在…

Semantic Kernel 学习笔记2

本来想白瞟免费Bing Search API如下,但是报错无法链接利用免费的必应 Bing 自定义搜索打造站内全文搜索_bing_subscription_key-CSDN博客 改成按照官方推荐申请,并在.env文件中添加BING_API_KEY""字段。 1. 打开https://www.microsoft.com/en-…

《QT从基础到进阶·二十七》进度条QProgressBar

ui.ProgressBar.setValue(45); //45% ui.ProgressBar.setMin(0); ui.ProgressBar.setMax(255);0到100分为255份,值为215时,进度条为100/255*215 84% 点击主界面弹出进度条QProgressDialog 常用功能: setWindowFlags(Qt::Dialog | Qt::Cu…

基于象群算法优化概率神经网络PNN的分类预测 - 附代码

基于象群算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于象群算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于象群优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

【C语言】自定义类型:结构体、枚举、联合

简单不先于复杂,而是在复杂之后 文章目录 1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 特殊的声明1.4 结构体的自引用1.5 结构体变量的定义和初始化1.6 结构体内存对齐1.7 修改默认对齐数1.8 结构体传参 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的…

解决:java: 错误: 不支持发行版本 5 最有效方法

报错信息如图&#xff1a; 直接上终极方法&#xff1a; 修改配置文件 如图找到settings.xml文件 在标签中间插入如下代码&#xff08;jdk更改为自己电脑上的版本&#xff09; <profile><id>development</id><activation><jdk>11</jdk><…

深入Rust:探索所有权和借用机制

大家好&#xff01;我是lincyang。 今天&#xff0c;我们将一起深入探索Rust语言中的一个核心概念&#xff1a;所有权和借用机制。 这些特性是Rust区别于其他语言的重要特点&#xff0c;它们在内存管理和并发编程中扮演着关键角色。 一、Rust所有权机制 1. 什么是所有权&#x…

USB复合设备构建CDC+HID鼠标键盘套装

最近需要做一个小工具&#xff0c;要用到USB CDCHID设备。又重新研究了一下USB协议和STM32的USB驱动库&#xff0c;也踩了不少坑&#xff0c;因此把代码修改过程记录一下。 开发环境&#xff1a; ST-LINK v2 STM32H743开发板 PC windows 11 cubeMX v6.9.2 cubeIDE v1.13.2 cub…

Google 向中国开发者开放数百份 TensorFlow 资源

Google 的机器学习框架 TensorFlow 自 2015 年开源后&#xff0c;已然成为 AI 领域最受欢迎的框架。 据统计&#xff0c;在广受欢迎的 Python 编程语言在线软件知识库 PyPi 上&#xff0c;TensorFlow 的下载次数已超过 90 万&#xff0c;其中有 15% 来自中国。谷歌官方博客也表…

11.10~11.15置信区间,均值、方差假设检验,正态,t,卡方,F分布,第一第二类错误

置信度&#xff0c;置信区间 给定一个置信度&#xff0c;就可以算出一个置信区间。 如果给的置信度越大&#xff0c;那么阿尔法就越小 给的置信度越小&#xff0c;那么α就越大&#xff0c;那么 考虑精确性&#xff0c;希望区间长度尽可能小&#xff0c;所以是取正态的中间…

Postman的常规断言/动态参数断言/全局断言

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 断言&#xff0c;包括状态码断言和业务断言&#xff0c;状态码断言有一个&#xff0c;业务断言有多个。 一&#xff09;常规的…

Python数据容器之(元组)

我们前面所了解的列表是可以修改的&#xff0c;但如果想要传递的信息&#xff0c;不被篡改&#xff0c;列表就不合适了。 元组同列表一样&#xff0c;都是可以封装多个、不同类型的元素在内。 但最大的不同点在于&#xff1a; 元组一旦定义完成&#xff0c;就不可修改 所以…

exce常用

一、冻结 同时冻结行和列 打开一个Excel表格&#xff0c;点击选择需要冻结的行和列交接处对应的单元格&#xff08;例如&#xff1a;需要同时冻结1、2行和A、B列&#xff0c;则选中行列交接对应的C3单元格&#xff09;&#xff09;&#xff0c; 即下一行 和下一列的交接点。 …

虹科方案 | 从概念到生产的自动驾驶软件在环(SiL)测试解决方案

来源&#xff1a;雅名特自动驾驶 虹科方案 | 从概念到生产的自动驾驶软件在环&#xff08;SiL&#xff09;测试解决方案 自动驾驶软件在环&#xff08;SiL&#xff09;测试解决方案 自动驾驶软件在环&#xff08;SiL&#xff09;测试解决方案能够研究和验证高历程实验和恶劣驾…