一文熟悉 Go 的基础语法和基本数据类型

news2024/10/6 18:26:13

一文熟悉 Go 的基础语法和基本数据类型

  • 前言
  • Hello,World!
    • 有关 main 函数的一些要点
  • 关键字
  • package
    • 声明
    • 引入
  • 基本数据类型
    • 整形数据类型
      • 有符号整数类型
      • 无符号整数类型
      • 其他整数类型
    • 浮点数据类型
    • 字符类型
    • 布尔类型
    • 字符串类型
    • 基本数据类型的默认值
  • 常量和变量声明
  • 结尾

耐心和持久胜过激烈和狂热。

前言

快速上手一门新的语言,首先要做的就是熟悉新语言的基本语法和基本数据类型,本文将对 Go 语言的基础语法和基本数据类型进行介绍。

Hello,World!

记得当初学习 C 语言的时候,第一个演示程序是输出 Hello World!,Go 官网的第一个案例也是输出 Hello,World!

package main // 包声明

import "fmt" // 包导入

// func 函数关键字
func main() {
	fmt.Println("Hello,World!")
}

Hello,World! 输出案例可知:

  • 声明包的关键字是 package
  • 导包的关键字是 import
  • 使用包里面的函数以 包名.函数 这种格式进行。
  • 函数的声明关键字是 func

有关 main 函数的一些要点

  • main 函数必须在 main 包里。
  • main 函数所在的文件被命名为 main.go 时,可以直接使用 go run ./main.go 命令直接运行程序。
  • main 函数所在的文件名字不为 main.go,需要分以下两种情况,假设所在文件的名字为 a.go
    • 1、当 a.go 文件里没有引用其他文件的变量等元素时,可以直接使用 go run ./a.go 运行。
      package main // 包声明
      
      import "fmt" // 包导入
      
      // func 函数关键字
      func main() {
      	fmt.Println("Hello,World!")
      }
      
      
      D:\go_projects\src\go_basic> go run .\main.go
      Hello,World!
      
    • 2、当 a.go 文件里有引用其他文件的变量等元素时,需要先使用 go build ./a.go ./b.go 生成可执行文件,再运行 exe 可执行文件。
      package main // a.go 文件
      
      import "fmt"
      
      func main() {
      	fmt.Println(name)
      }
      
      
      package main // b.go 文件
      
      var name string = "cmy"
      
      
      D:\go_projects\src\go_basic> go run .\a.go
      # command-line-arguments
      .\a.go:6:14: undefined: name
      
      D:\go_projects\src\go_basic> go build .\a.go .\b.go
      D:\go_projects\src\go_basic> ls
      
          目录: D:\go_projects\src\go_basic
      Mode                 LastWriteTime         Length Name
      ----                 -------------         ------ ----
      d-----        2022-11-23      1:39                .idea
      -a----        2022-11-23      2:03        1950720 a.exe
      -a----        2022-11-23      1:50             63 a.go
      -a----        2022-11-23      1:52             38 b.go
      -a----        2022-11-23      1:57            127 main.go
      
      D:\go_projects\src\go_basic> .\a.exe
      cmy
      

关键字

除了上面提到的几个关键字以外,Go 语言还有其他关键字,一共 25 个关键字。
在这里插入图片描述

package

声明

  • 语法格式: package xxx
    package main
    
  • 包名字由英文或英文与下划线组合组成。
  • 注意点:
    • 包声明时名字可以和文件夹的命名不一样。
      在这里插入图片描述
    • 同一个文件夹内,每个 Go 文件的包声明必须一致,否则会报错。
      package hello // a.go 文件
      
      
      package hello // b.go 文件
      
      

引入

  • 包的引入方式:import [alias] xxx,alice 是一个可选值,为包起别名。
    import "fmt"
    
    import f "fmt" // 起别名
    
  • 注意点:
    • 引入包而没有使用,会报错。
    • 匿名引入:
      import _ "fmt" // 起别名
      
      一般匿名引入,是为了使用包里面的 init 函数,它先于 main 函数之前执行
      func init() {
      	
      }
      

基本数据类型

Go 语言中的数据类型有很多,除了本文介绍的基本数据类型以外,还有指针、数组、结构体 struct、管道 channel、函数 func 、切片 slice 、接口 interface、map 等。
在这里插入图片描述

整形数据类型

有符号整数类型

类型占用存储空间表数范围
int81字节 − 2 7 -2^{7} 27 ~ 2 7 2^{7} 27-1 (-128-127)
int162字节 − 2 15 -2^{15} 215 ~ 2 15 2^{15} 215-1 (-32768-32767)
int324字节 − 2 31 -2^{31} 231 ~ 2 31 2^{31} 231-1 (-2147483648-2147483647)
int648字节 − 2 63 -2^{63} 263 ~ 2 63 2^{63} 263-1

无符号整数类型

类型占用存储空间表数范围
uint81字节0~255
uint162字节0~ 2 16 2^{16} 216-1
uint324字节0~ 2 31 2^{31} 231-1
uint648字节0~ 2 63 2^{63} 263-1

其他整数类型

类型有无符号占用存储空间表数范围
int32位系统-4字节, 64位系统-8字节 − 2 31 -2^{31} 231 ~ 2 31 2^{31} 231-1, − 2 63 -2^{63} 263 ~ 2 63 2^{63} 263-1
uint32位系统-4字节, 4位系统-8字节0 ~ 2 31 2^{31} 231-1, 0~ 2 64 2^{64} 264-1
rune等价 int32 − 2 31 -2^{31} 231 ~ 2 31 2^{31} 231-1
byte等价 unint80~255

浮点数据类型

类型占用存储空间表数范围
float324字节-3.403E38~3.403E38
float648字节-1.798E308~1.798E308

字符类型

  • Go 没有字符类型,如果要存单个字符(字母),可使用 byte 类型代替。
  • Go 中字符使用 UTF-8 编码。

布尔类型

  • 布尔类型在 Go 中对应 bool 类型,它只允许取值为 truefalse
  • 布尔类型占 1 个字节。
  • 布尔类型适用于逻辑运算,一般用于程序流程控制。

字符串类型

  • 字符串不可变(指的是其中字符的值不能变,例如 var name string = "cmy",然后操作 name[0]='a' 是不行的)。
  • 如果字符串中需要换行或者字符串较复杂,可以使用反引号 ``。

基本数据类型的默认值

数据类型默认值
整数类型0
浮点类型0
布尔类型false
字符串类型“”

常量和变量声明

  • 常量声明:const xxx type = value
    const realName string = "chenmingyong"
    const Age int = 18
    
  • 变量声明:var xxx type = value
    var realName string = "chenmingyong"
    var Age int = 18
    
    在定义局部变量(方法或函数内部的变量)时,还可以使用 := 去声明,切记是局部变量,全局变量不能使用 :=,否则会报错。
    realName := "chenmingyong"
    Age := 18
    
    Go 会使用类型推断来判断类型,数字会被理解为 int 或者 float64,字符串会被理解为 string
  • 注意点:
    • Go 推荐使用驼峰命名的方式。
    • 常量被声明后,后续的值不能被修改。
    • 常量和变量的名字,首字母是否大写,决定着它是否能够被包外文件访问,大写则可以被包外的 Go 文件访问,小写则认为是私有的,只能被包内的 Go 文件访问。
    • 变量声明之后,没有使用,编译时会报错。
    • 类型不匹配不能被赋值。
    • 同一个作用域下,变量只能声明一次。

结尾

如果本文对你有帮助,欢迎点赞收藏加关注,如果本文有错误的地方,欢迎指出!

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

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

相关文章

swift指针内存管理-指针类型使用

为什么说指针不安全 我们在创建一个对象的时候,是需要在堆上开辟内存空间的 但是这个内存空间的声明周期是有限的 也就意味着如果使用指针指向这块内存空间,当这块内存空间的生命周期结束(引用计数为0),那么当前的指针…

mac m1 配置goland debbug

大概率无法使用goland的debug功能,如果自己安装没选对路径,也无法使用。原因是: go env 配置不对,需要指向 ARM64; dlv版本不对,需要使用 arm64 系列; dlv路径不对,需要使用 macarm…

Linux服务器使用git clone命令时报错的解决方案

在往GitHub上上传项目时,使用git clone xxxxx.git时候报错: “gnutls_handshake() failed: the TLS connection was non-properly terminated” 由系统的 git 默认使用的 libcurl4-gnutls-dev 造成,可以使用openssl解决. 但是这个过程也很多…

2022亚太B题赛题分享

高速列车的优化设计 2022年4月12日,中国高铁复兴CR450多机组成功实现单列列车速度435 km/h,相对速度870 km/h,创造了高铁多机组列车穿越明线和隧道速度的世界纪录。新一代标准动车组“复兴”是中国自主研发的具有全知识产权的新一代高速列车。…

Doris 5 处理Sentinel-1 生成干涉图 interferogram

Doris 5 处理Sentinel-1 Step 0 创建文件夹 首先创建一个文件夹用来准备数据处理,例如 “Doris_test1”,然后在该文件夹下创建五个文件夹,用来存放数据,例如 AOI (研究区的shp文件), archive_data (已下载的Sentinel-1 SLC文件&…

手部IK,自制动画,蒙太奇——开门手臂自动弯曲、靠墙手自动扶墙

开门手臂自动弯曲 实现效果:人物做出抬手的开门动画时,若手臂碰到静态网格物体,拳头不会穿过物体,而是会产生手臂IK弯曲动画效果。 重要参考资料: 学习UE4动画蓝图:配置手部IK_YakSue的博客-CSDN博客_ue…

ImageProvider工作流程和AssetImage 加载流程

Flutter 学习:ImageProvider工作流程和AssetImage 的自动分辨率适配原理https://cloud.tencent.com/developer/article/1748045上面流程为ImageProvider工作流程细节,作者已经写的很详细了,非常受用,现在接着上面作者内容讨论下As…

【32-业务开发-基础业务-规格参数-保存数据-查询数据-更新操作之数据回显展示-更新操作-前后端项目交互整合与测试-总结收获】

一.知识回顾 【0.三高商城系统的专题专栏都帮你整理好了,请点击这里!】 【1-系统架构演进过程】 【2-微服务系统架构需求】 【3-高性能、高并发、高可用的三高商城系统项目介绍】 【4-Linux云服务器上安装Docker】 【5-Docker安装部署MySQL和Redis服务】…

1532_AURIX_TriCore内核架构_中断

全部学习汇总: GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 中断一直是我想了解关注的一个功能模块,因为感觉不同的芯片上这部分的设计差异比较大。而这部分也跟我们嵌入式软件的设计模式直接相关。…

使用HikariCP连接池常用配置讲解及注意事项

使用HikariCP连接池常用配置讲解及注意事项常遇到的几种错误Possibly consider using a shorter maxLifetime valueConnection is not available, request timed out after xxxxxmsNo operations allowed after connection closed常见配置及注释说明,可以使用并根据…

每日刷题2——指针概念

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…

Twins: Revisiting the Design of Spatial Attention in Vision Transformers

Twins: Revisiting the Design of Spatial Attention in Vision Transformers一、引言二、Twins-PCPVT三、Twins-SVT四、实验五、消融实验文章链接: https://arxiv.org/abs/2104.13840代码链接: https://github.com/Meituan-AutoML/Twins一、引言 在本文中,重新审…

基于Matlab计算经典CFAR阈值

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

基于开源 PolarDB-X 打造中正智能身份认证业务数据基座

一、公司及业务介绍 中正智能是全球领先的生物识别和身份认证公司之一。我们曾负责公安部指纹算法国家标准的起草、编写,具备从算法、终端、平台、设计、生产、交付全域自研的能力,拥有多项自主知识产权的产品,并积极与高校合作开展基础研发。…

【Rust 指南】并发编程|无畏并发的原因

文章目录前言1、线程1.1、通过 spawn 创建新线程1.2、join 方法2、move 强制所有权迁移3、使用消息传递跨线程传递数据3.1、Send 方法3.2 、Sync 方法前言 安全高效的处理并发是 Rust 诞生的目的之一,主要解决的是服务器高负载承受能力。 并发(concurren…

石家庄正定县恢复种植 国稻种芯·中国水稻节:河北绘就画卷

石家庄正定县恢复种植 国稻种芯中国水稻节:河北绘就画卷 新华社记者 杨世尧 摄 河北日报 通讯员张 晓峰 摄影报道 新闻中国采编网 中国新闻采编网 谋定研究中国智库网 中国农民丰收节国际贸易促进会 国稻种芯中国水稻节 中国三农智库网-功能性农业农业大健康大会…

MongoDB备份与恢复

MongoDB备份与恢复 文章目录MongoDB备份与恢复1.备份恢复工具2.备份工具区别3.mongoexport导出工具命令4.导出MongoDB的表4.1.创建备份的目录4.2.登录数据库4.3.查询表和表中数据4.4.导出数据为json格式4.5.导出数据为csv格式5.mongoimport导入工具5.1.恢复json格式数据5.2.登录…

Python基础-3-列表

一:简述 列表是由一系列按特定顺序排列的元素组成,可以创建包含字母表中所有字母,数字或家庭成员姓名的列表;也可以将任何东西加入列表,其中的元素之间可以没有任何关系。列表中通常包含了多个元素,因此给…

HTTPS中间人攻击实验

HTTPS中间人攻击实验 一.实验基础 1、HTTPS概述 HTTPS (全称: Hyper Text Transfer Protocol over SecureSocketLayer), 是以安全为目标的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。 默认端口:443 SSLspli…

【无人机】基于拓展卡尔曼滤波时序四旋翼无人机状态跟踪附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …