第2章:Go语言基础语法

news2025/1/8 14:35:34

第2章:Go语言基础语法

1. 变量和数据类型

1.1 基本数据类型

Go语言提供了以下基本数据类型:

// 整数类型
var intVar1 int    // 根据系统位数,32或64位
var intVar2 int8   // -128 到 127
var intVar3 int16  // -32768 到 32767
var intVar4 int32  // -2^31 到 2^31-1
var intVar5 int64  // -2^63 到 2^63-1

// 无符号整数类型
var uintVar1 uint    // 32或64位
var uintVar2 uint8   // 0 到 255
var uintVar3 uint16  // 0 到 65535
var uintVar4 uint32  // 0 到 2^32-1
var uintVar5 uint64  // 0 到 2^64-1

// 浮点数类型
var floatVar1 float32  // 32位浮点数
var floatVar2 float64  // 64位浮点数

// 布尔类型
var boolVar bool  // true 或 false

// 字符串类型
var strVar string  // 字符串

// 字符类型(实际是int32的别名)
var charVar rune   // Unicode字符

1.2 变量声明和初始化

Go语言提供多种变量声明方式:

// 方式1:完整声明
var name string = "张三"

// 方式2:类型推断
var age = 25  // 自动推断为int

// 方式3:短变量声明(只能在函数内使用)
username := "admin"

// 多变量声明
var x, y int = 10, 20

// 批量声明
var (
    width  = 100
    height = 200
)

1.3 类型转换

// 基本类型转换
var intVar int = 42
var floatVar float64 = float64(intVar)  // 显式转换

// 字符串转换
ageStr := "25"
age, err := strconv.Atoi(ageStr)  // 字符串转整数
if err != nil {
    fmt.Println("转换错误:", err)
}

// 整数转字符串
numStr := strconv.Itoa(age)

2. 运算符

2.1 算术运算符

a := 10
b := 3

fmt.Println("加法:", a + b)    // 13
fmt.Println("减法:", a - b)    // 7
fmt.Println("乘法:", a * b)    // 30
fmt.Println("除法:", a / b)    // 3
fmt.Println("取模:", a % b)    // 1

// 自增和自减(只能作为独立语句)
a++  // 等价于 a = a + 1
b--  // 等价于 b = b - 1

2.2 比较运算符

x := 5
y := 10

fmt.Println("等于:", x == y)       // false
fmt.Println("不等于:", x != y)     // true
fmt.Println("大于:", x > y)        // false
fmt.Println("小于:", x < y)        // true
fmt.Println("大于等于:", x >= y)    // false
fmt.Println("小于等于:", x <= y)    // true

2.3 逻辑运算符

isTrue := true
isFalse := false

fmt.Println("与运算:", isTrue && isFalse)   // false
fmt.Println("或运算:", isTrue || isFalse)   // true
fmt.Println("非运算:", !isTrue)             // false

3. 控制流

3.1 if/else语句

// 基本if语句
score := 85
if score >= 90 {
    fmt.Println("优秀")
} else if score >= 60 {
    fmt.Println("及格")
} else {
    fmt.Println("不及格")
}

// 带初始化的if语句
if num := getValue(); num > 0 {
    fmt.Println("正数")
}

3.2 switch语句

// 基本switch
day := 3
switch day {
case 1:
    fmt.Println("星期一")
case 2:
    fmt.Println("星期二")
default:
    fmt.Println("其他日期")
}

// 多条件switch
switch x := 5; x {
case 1, 3, 5:
    fmt.Println("奇数")
case 2, 4, 6:
    fmt.Println("偶数")
default:
    fmt.Println("未知")
}

// 不带条件的switch
switch {
case x > 0:
    fmt.Println("正数")
case x < 0:
    fmt.Println("负数")
default:
    fmt.Println("零")
}

3.3 for循环

// 基本for循环
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// while类型循环
j := 0
for j < 5 {
    fmt.Println(j)
    j++
}

// 无限循环
for {
    // 执行操作
    // break可以退出循环
}

// 遍历数组/切片
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
    fmt.Printf("索引:%d, 值:%d\n", index, value)
}

4. 函数

4.1 函数定义和调用

// 基本函数
func add(a int, b int) int {
    return a + b
}

// 调用函数
result := add(10, 20)
fmt.Println(result)  // 30

4.2 多返回值

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("除数不能为零")
    }
    return a / b, nil
}

quotient, err := divide(10, 2)
if err != nil {
    fmt.Println("错误:", err)
} else {
    fmt.Println("结果:", quotient)
}

4.3 匿名函数和闭包

// 匿名函数
greet := func(name string) {
    fmt.Println("Hello,", name)
}
greet("Go")

// 闭包示例
func counter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

nextCount := counter()
fmt.Println(nextCount())  // 1
fmt.Println(nextCount())  // 2

4.4 递归函数

// 阶乘递归
func factorial(n int) int {
    if n <= 1 {
        return 1
    }
    return n * factorial(n-1)
}

fmt.Println(factorial(5))  // 120

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

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

相关文章

Harmony开发【笔记1】报错解决(字段名写错了。。)

在利用axios从网络接收请求时&#xff0c;发现返回obj的code为“-1”&#xff0c;非常不解&#xff0c;利用console.log测试&#xff0c;更加不解&#xff0c;可知抛出错误是 “ E 其他错误: userName required”。但是我在测试时&#xff0c;它并没有体现为空&#xff0c;…

springCloudGateWay使用总结

1、什么是网关 功能: ①身份认证、权限验证 ②服务器路由、负载均衡 ③请求限流 2、gateway搭建 2.1、创建一个空项目 2.2、引入依赖 2.3、加配置 3、断言工厂 4、过滤工厂 5、全局过滤器 6、跨域问题

韩国机场WebGIS可视化集合Google遥感影像分析

目录 前言 一、相关基础数据介绍 1、韩国的机场信息 2、空间数据准备 二、Leaflet叠加Google地图 1、叠加google地图 2、空间点的标记及展示 3、韩国机场空间分布 三、相关成果展示 1、务安国际机场 2、有同类问题的机场 四、总结 前言 12月29日8时57分左右务安国际机…

电子电气架构 --- 设计车载充电机的关键考虑因素

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

python进阶06:MySQL

课后大总结 Day1 一、数据库命令总结 1.连接数据库 连接数据库进入mysql安装目录打开bin文件夹&#xff0c;输入cmd(此命令后无分号)mysql.exe -u root -ppassword命令后输入密码:root 设置密码set passwordpassword("root123"); 查看所有数据库show databases; …

php反序列化原生态 ctfshow练习 字符串逃逸

web262 拿着题审计一下 <?php error_reporting(0); class message{public $from;public $msg;public $to;public $tokenuser;public function __construct($f,$m,$t){$this->from $f;$this->msg $m;$this->to $t;} }$f $_GET[f]; $m $_GET[m]; $t $_GET[t…

探秘前沿科技:RFID 与 NFC,开启智能识别新篇

RFID&#xff08;射频识别&#xff09;与NFC&#xff08;近场通信&#xff09;作为两种基于射频技术的无线通信方式&#xff0c;在现代社会中发挥着越来越重要的作用。尽管它们都具备非接触式识别和通信的能力&#xff0c;但在工作原理、应用场景、技术细节等方面存在着显著的差…

【04】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第四篇安卓APP上架之vivo商店-小米商店,oppo商店,应用宝

【04】优雅草央千澈详解关于APP签名以及分发-上架完整流程-第四篇安卓APP上架之vivo商店-小米商店&#xff0c;oppo商店&#xff0c;应用宝 背景介绍 接第三篇上架华为&#xff0c;由于华为商店较为细致&#xff0c;本篇幅介绍其他4类商店相对简要一点&#xff0c;剩下其他更…

OpenCV计算机视觉 06 图像轮廓检测(轮廓的查找、绘制、特征、近似及轮廓的最小外接圆外接矩形)

目录 图像轮廓检测 轮廓的查找 轮廓的绘制 轮廓的特征 面积 周长 根据面积显示特定轮廓 轮廓的近似 给定轮廓的最小外接圆、外接矩形 外接圆 外接矩形 图像轮廓检测 轮廓的查找 API函数 image, contours, hierarchy cv2.findContours(img, mode, method) 代入参…

ROS2 跨机话题通信问题(同一个校园网账号)

文章目录 写在前面的话校园网模式&#xff08;失败&#xff09;手机热点模式&#xff08;成功&#xff09; 我的实验细节实验验证1、ssh 用户名IP地址 终端控制2、互相 ping 通 IP3、ros2 run turtlesim turtlesim_node/turtle_teleop_key4、ros2 multicast send/receive5、从机…

web3与AI结合-Sahara AI 项目介绍

背景介绍 Sahara AI 于 2023 年创立&#xff0c;是一个 "区块链AI" 领域的项目。其项目愿景是&#xff0c;利用区块链和隐私技术将现有的 AI 商业模式去中心化&#xff0c;打造公平、透明、低门槛的 “协作 AI 经济” 体系&#xff0c;旨在重构新的利益分配机制以及…

【C++】你了解异常的用法吗?

文章目录 Ⅰ. C语言传统的处理错误的方式Ⅱ. C异常概念Ⅲ. 异常的使用1、异常的抛出和匹配原则2、在函数调用链中异常栈展开匹配原则3、异常的重新抛出4、异常安全5、异常规范 Ⅳ. 自定义异常体系Ⅴ. C标准库的异常体系Ⅵ. 异常的优缺点1、异常的优点2、异常的缺点3、总结 Ⅰ. …

Matlab仿真径向受压圆盘光弹图像

Matlab仿真径向受压圆盘光弹图像-十步相移法 主要参数 % 定义圆盘参数 R 15; % 圆盘半径&#xff0c;单位&#xff1a;mm h 5; % 圆盘厚度&#xff0c;单位&#xff1a;mm P 300; % 径向受压载荷大小&#xff0c;单位&#xff…

游戏引擎学习第75天

仓库:https://gitee.com/mrxiao_com/2d_game_2 Blackboard: 处理楼梯通行 为了实现楼梯的平滑过渡和角色的移动控制&#xff0c;需要对楼梯区域的碰撞与玩家的运动方式进行优化。具体的处理方式和遇到的问题如下&#xff1a; 楼梯区域的过渡&#xff1a; 在三维空间中&#x…

算法的学习笔记—不用常规控制语句求 1 到 n 的和

&#x1f600;前言 在算法编程中&#xff0c;有时我们会遇到一些特殊的限制条件&#xff0c;这些限制会迫使我们跳出常规思维。本文讨论的问题就是一个典型案例&#xff1a;在不能使用基本控制语句的情况下&#xff0c;如何求解 1 到 n 的和。这个问题不仅考验编程技巧&#xf…

网络协议安全的攻击手法

1.使用SYN Flood泛洪攻击&#xff1a; SYN Flood(半开放攻击)是最经典的ddos攻击之一&#xff0c;他利用了TCP协议的三次握手机制&#xff0c;攻击者通常利用工具或控制僵尸主机向服务器发送海量的变源端口的TCP SYN报文&#xff0c;服务器响应了这些报文后就会生成大量的半连…

141.《mac m1安装mongodb详细教程》

文章目录 下载从官网下载安装包 下载后双击解压出文件夹安装文件名修改为 mongodb配置data存放位置和日志log的存放位置启动方式一方式二方式二:输入mongo报错以及解决办法 本人电脑 m2 pro,属于 arm 架构 下载 官网地址: mongodb官网 怎么查看自己电脑应该下载哪个版本,输入…

C++ operator = 返回void 会发生什么?

1.operator 正常情况 #include <iostream> using namespace std;class Box { public:Box(double L) : length(L) {}Box(const Box& b){}Box& operator (const Box&){return *this;}public:double length; // 长度 };int main() {Box box1(1.0);Box box2(…

Redis中字符串和列表的区别

在 Redis 中&#xff0c;字符串&#xff08;String&#xff09;和列表&#xff08;List&#xff09;是两种截然不同的数据类型&#xff0c;它们各自有着独特的特点和适用场景。 数据结构 • 字符串&#xff08;String&#xff09;&#xff1a; • 在 Redis 中&#xff0c;字符串…

Elasticsearch JavaRestClient版

文章目录 初始化RestHighLeveClient&#xff08;必要条件&#xff09;索引库操作1.创建索引库&#xff08;4步&#xff09;2.删除索引库&#xff08;3步&#xff09;3.判断索引库是否存在&#xff08;3步&#xff09;4.总结&#xff1a;四步走 文档操作1.创建文档&#xff08;4…