当前位置: 首页 > news >正文

Go语言学习笔记:基础语法和类型

Go语言学习笔记:基础语法和类型

目录

  • Go语言学习笔记:基础语法和类型
    • 学习路线
    • 前言
    • 变量声明
    • 常量
    • 数据类型
      • 布尔型(Boolean)
      • 整型(Integer)
      • 浮点型(Floating point)
      • 复数型(Complex numbers)
      • 字符串(String)
    • 类型转换
    • 控制结构
      • if、else
      • for
      • switch
    • 数组
    • 切片
    • 映射
    • 结构体
    • 指针
    • 函数

学习路线

在这里插入图片描述

前言

Go语言是一种静态类型、编译型语言,它的语法受到了C语言的影响,但在简化代码书写和增强代码安全性方面做了很多改进。下面是Go语言基础语法和类型的详细学习指南。

变量声明

Go语言中你可以使用var关键字来声明变量,并可选择立即初始化变量。

var a int = 1
var b = 2 // 类型推断
c := 3 // 简短声明,只能在函数内部使用

常量

常量使用const关键字声明,且必须在编译时确定值。

const Pi = 3.14159

数据类型

Go语言提供了一系列的基本数据类型:

  • 布尔型(Boolean): bool,它的值是true或false。
  • 整型(Integer): 包括int、int8、int16、int32、int64以及它们的无符号版本uint、uint8、uint16、uint32、uint64和uintptr。
  • 浮点型(Floating point): float32和float64。
  • 复数型(Complex numbers): complex64和complex128,它们分别对应float32和float64两种浮点数精度。
  • 字符串(String): string,表示UTF-8字符序列。

布尔型(Boolean)

var isTrue bool = true
var isFalse bool = false
fmt.Println(isTrue)  // 输出:true
fmt.Println(isFalse) // 输出:false

整型(Integer)

var intVal int = 10
var int8Val int8 = 127
var int16Val int16 = 32767
var int32Val int32 = 2147483647
var int64Val int64 = 9223372036854775807
var uintVal uint = 10 // 无符号整型
fmt.Println(intVal, int8Val, int16Val, int32Val, int64Val, uintVal)

浮点型(Floating point)

var float32Val float32 = 3.1415926535 // 单精度浮点数
var float64Val float64 = 3.141592653589793 // 双精度浮点数
fmt.Printf("%.2f\n", float32Val) // 输出:3.14
fmt.Printf("%.2f\n", float64Val) // 输出:3.14

复数型(Complex numbers)

var complex64Val complex64 = 1 + 2i
var complex128Val complex128 = 1 + 2i
fmt.Println(complex64Val)  // 输出:(1+2i)
fmt.Println(complex128Val) // 输出:(1+2i)

字符串(String)

var str string = "Hello, World!"
fmt.Println(str) // 输出:Hello, World!

在Go语言中,字符串是不可变的,字符序列使用UTF-8编码表示。字符串可以包含任意的数据,包括byte值0,但是通常用来包含人类可读的文本。文本字符串通常被解释为采用UTF-8编码的Unicode码点(rune)序列。

类型转换

Go要求显式类型转换,语法为Type(v),将值v转换为Type类型。

i := 42
f := float64(i)
u := uint(f)

控制结构

Go语言中的控制结构包括if、else、for和switch

if、else

if i%2 == 0 {fmt.Println(i, "is even")
} else {fmt.Println(i, "is odd")
}

for

for i := 0; i < 10; i++ {fmt.Println(i)
}

switch

switch os := runtime.GOOS; os {
case "darwin":fmt.Println("OS X.")
default:fmt.Println("%s.", os)
}

数组

数组是具有固定大小且类型相同的元素序列。

var a [5]int // 声明一个包含5个整数的数组

切片

切片是对数组的抽象,它提供了更加灵活的、动态大小的视图。

s := make([]int, 0, 10) // 创建一个初始长度为0、容量为10的切片
s = append(s, 2)         // 向切片追加元素

映射

映射是键值对的无序集合。

m := make(map[string]int) // 创建一个空映射
m["key"] = 42            // 设置键值对

结构体

结构体是一种聚合数据类型,它用于将不同类型的数据组合在一起。

type Vertex struct {X, Y int
}var v = Vertex{1, 2} // 创建一个Vertex类型的结构体变量

指针

指针保存了值的内存地址。

var p *int
i := 42
p = &i // p指向i
*p = 21 // 通过指针p设置i的值

函数

函数可以有多个返回值,并支持命名返回值。

func swap(x, y string) (string, string) {return y, x
}

这些是Go语言的基础部分,学习时可以通过编写简单的程序来实践这些概念。Go的标准库中还有大量的包提供了额外的功能,比如文件操作、网络通信等等。随着对这些基础知识的熟练掌握,你可以开始探索这些高级话题,进一步提高你的Go编程能力。

相关文章:

  • 【Java】SpringMVC参数接收
  • 【电商API接口Python实例】100个Python爬虫实例
  • pyspark之Structured Streaming file文件案例1
  • 设备通过GB28181注册到EasyCVR,平台看不到设备信息的排查方法汇总
  • OpenCV第 2 课 OpenCV 环境搭建
  • LabVIEW高级CAN通信系统
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • 深入Android S (12.0) 探索Framework之输入子系统InputReader的流程
  • notepad++: 插件fingertext 来创建代码块
  • 考研过后你如坐针毡,而有些人因选择中国人民大学与加拿大女王大学金融硕士而乐在其中
  • 网络中黑客攻击使用手段Top25漏洞常见参数,8个WAF绕过,一些用于查找敏感文件的语法
  • Windows ssh登录eNSP交换机
  • 直播录屏工具哪家强?让你的直播更精彩!
  • 【VRTK】【PICO】如何快速创建一个用VRTK开发的PICO项目
  • 【算法专题】动态规划之路径问题
  • Android系统模拟器绘制实现概述
  • CSS盒模型深入
  • Fundebug计费标准解释:事件数是如何定义的?
  • idea + plantuml 画流程图
  • JavaScript新鲜事·第5期
  • js
  • JS题目及答案整理
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • React的组件模式
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 回顾 Swift 多平台移植进度 #2
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 面试遇到的一些题
  • 使用API自动生成工具优化前端工作流
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 积累各种好的链接
  • ​【已解决】npm install​卡主不动的情况
  • # 达梦数据库知识点
  • #if和#ifdef区别
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .gitignore文件_Git:.gitignore
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复