Go基础语法与控制结构

Go基础语法与控制结构

1. 环境配置与Hello World(扩展)

安装指南

# 验证安装成功
$ go version
# 设置模块代理(中国用户推荐)
$ go env -w GOPROXY=https://goproxy.cn,direct

程序解剖

package main  // 程序入口包声明import "fmt"  // 格式化IO包// main函数是程序唯一入口
func main() {// Println自动换行且支持Unicodefmt.Printf("当前Go版本: %s\n", runtime.Version()) 
}

2. 变量与数据类型(增强)

类型系统全景图

数据类型
基本类型
复合类型
整型 int/int8/uint等
浮点型 float32/float64
布尔型 bool
字符型 rune/byte
数组
结构体
函数

零值机制

var (a int     // 0b float64 // 0.0c string  // ""d bool    // false
)

类型别名

type Celsius float64  // 温度类型
var temp Celsius = 36.6

3. 流程控制(增强)

条件语句进阶

// 带作用域的变量声明
if file, err := os.Open("test.txt"); err != nil {fmt.Println("打开文件失败:", err)
} else {defer file.Close()// 处理文件内容
}

Switch黑科技

// 类型判断switch
var val interface{} = 3.14
switch val.(type) {
case int:fmt.Println("整数类型")
case float64:fmt.Println("双精度浮点")
default:fmt.Println("未知类型")
}// 表达式缺失的switch
score := 85
switch {
case score >= 90:fmt.Println("A")
case score >= 80:fmt.Println("B")
case score >= 70:fmt.Println("C")
}

循环控制全景

// 死循环写法
for {// 需要内部break退出
}// range迭代(后续章节详解)
words := []string{"Go", "Java", "Python"}
for index, word := range words {fmt.Printf("%d:%s ", index, word)
}
// 输出:0:Go 1:Java 2:Python

4. 函数定义(增强)

函数特性矩阵

特性示例说明
可变参数func sum(nums …int)类似Python的*args
匿名函数func() { // }()立即执行函数
闭包计数器工厂函数捕获外部变量
延迟执行defer资源清理FILO顺序执行

闭包示例

func counter() func() int {count := 0return func() int {count++return count}
}c := counter()
fmt.Println(c(), c(), c()) // 1 2 3

错误处理规范

func loadConfig(path string) (*Config, error) {file, err := os.Open(path)if err != nil {return nil, fmt.Errorf("配置加载失败: %w", err)}defer file.Close()// 解析配置...return &config, nil
}

5. 实战演练:温度转换程序

package mainimport "fmt"type Celsius float64
type Fahrenheit float64func CToF(c Celsius) Fahrenheit {return Fahrenheit(c*9/5 + 32)
}func FToC(f Fahrenheit) Celsius {return Celsius((f - 32) * 5 / 9)
}func main() {var c Celsius = 100fmt.Printf("%v°C = %v°F\n", c, CToF(c))f := Fahrenheit(212)fmt.Printf("%v°F = %v°C\n", f, FToC(f))
}
graph TDA[开始] --> B[输入温度值]B --> C{选择转换方向}C -->|C→F| D[调用CToF函数]C -->|F→C| E[调用FToC函数]D --> F[输出结果]E --> FF --> G[结束]

Go复合类型与内存管理

1. 数组与切片(增强)

底层关系图解

切片操作
数组
切片
长度len
容量cap
底层数组指针

切片扩容机制

s := []int{1,2,3}
fmt.Printf("原始容量: %d\n", cap(s)) // 3s = append(s, 4)
fmt.Printf("扩容后容量: %d\n", cap(s)) // 6(Go 1.18+策略)

2. 映射与结构体(增强)

嵌套结构体

type Address struct {City    stringZipCode int
}type User struct {Name    stringAge     intAddress // 匿名嵌入
}func main() {u := User{Name: "张三",Age:  25,Address: Address{City:    "北京",ZipCode: 100000,},}fmt.Println(u.City) // 直接访问匿名字段
}

3. 接口与反射(新增章节)

接口实现原理

接口变量
类型指针
数据指针
具体类型信息
实际数据值

类型断言示例

var val interface{} = "hello"if s, ok := val.(string); ok {fmt.Println(s)
} else {fmt.Println("不是字符串类型")
}

实战项目建议​:尝试开发一个简单的学生管理系统,要求:

  • 使用结构体存储学生信息(姓名、学号、成绩)
  • 使用切片实现数据存储
  • 实现增删改查功能
  • 支持数据持久化存储

建议配合官方文档 https://golang.org/doc 进行深入学习。

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

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

相关文章

QGIS新手教程:两种方法创建点图层(手动添加 + 表格导入),支持经纬度定位与查找

🌍QGIS新手教程:两种方法创建点图层(手动添加 表格导入),支持经纬度定位与查找 本文将手把手教你在 QGIS 中通过两种方法创建点图层,并结合经纬度定位、拾取坐标、查找属性等功能,快速掌握从地…

Doris ClickHouse Greenplum 对比

1. 核心架构对比 Doris (https://doris.apache.org/) MPP架构 列式存储支持实时更新(Unique Key模型)向量化执行引擎兼容MySQL协议 ClickHouse (https://clickhouse.com/) 分布式列式存储MergeTree存储引…

基于python,html,echart,php,mysql,在线实时监控入侵检测系统

详细视频:【基于python,html,echart,php,mysql,在线实时监控入侵检测系统,需要的可联系介绍都在所有图片中。包远程部署安装。-哔哩哔哩】 https://b23.tv/KHxmE8k

基于51单片机智能垃圾桶—红外感应自动开关

基于51单片机智能垃圾桶 (仿真+程序+原理图+PCB+设计报告) 功能介绍 具体功能: 1.ULN2003驱动步进电机控制打开关闭垃圾桶; 2.一个红外对管检测有没有人,一个红外对管…

自动涂胶机设计及其在工业生产中的应用研究

摘要 本文详细探讨了自动涂胶机的设计原理、关键技术和应用前景。随着工业自动化水平的不断提高,自动涂胶机在制造业中的应用日益广泛。文章首先分析了自动涂胶机的基本工作原理,然后深入研究了其机械结构设计、控制系统设计和视觉定位系统等关键技术。…

SQL 语言

SQL概述与数据库定义 SQL的基本组成 1、数据定义语言。SQL DDL提供定义关系模式和视图、删除关系和视图、修改关系模式的命令。 2、交互式数据操纵语言。SQL DML提供查询、插入、删除和修改的命令。 3、事务控制。SQL提供定义事务开始和结束的命令。 4、嵌入式SQL和动态SQL。用…

深度剖析ZooKeeper

1. ZooKeeper架构总览 ZooKeeper 是一个分布式协调服务,广泛用于分布式系统中的配置管理、命名服务、分布式锁和领导选举等场景。以下是对 ZooKeeper 架构、通信机制、容错处理、数据一致性与可靠性等方面的详细剖析。 一、ZooKeeper 主从集群 ZooKeeper 采用 主从…

K8S-statefulset-mysql-ha

需求 实现一个HA mysql,包括1个master,2个slave。在K8S上已statefulset部署。 mysql HA原理 略 K8S环境需要解决的问题 1、由于使用同一个statefulset配置,因此需要考虑master和slave使用不同的cnf文件。 2、不同pod之间文件的传输 3、…

人脸美颜磨皮祛痘1:数据集说明(含下载链接)

一. 前言 本篇博客是《人脸美颜磨皮祛痘》系列文章之《数据集说明(含下载链接)》,像这种深度学习图像修复的数据一般是需要成对,网上很难找到,公司或者个人都是花钱找人做。为了方便你我他,本博客将分享一个由我自己整理的人脸美…

redis功能清单

文章目录 Redis高级功能使用说明功能清单1. 分布式锁1.1 功能描述1.2 使用方法1.3 测试接口 2. 消息发布订阅2.1 功能描述2.2 使用方法发布消息订阅消息 2.3 测试接口 3. 接口限流3.1 功能描述3.2 使用方法方式一:直接使用工具类方式二:使用注解&#xf…

从代码学习深度学习 - 预训练word2vec PyTorch版

文章目录 前言辅助工具1. 绘图工具 (`utils_for_huitu.py`)2. 数据处理工具 (`utils_for_data.py`)3. 训练辅助工具 (`utils_for_train.py`)预训练 Word2Vec - 主流程1. 环境设置与数据加载2. 跳元模型 (Skip-gram Model)2.1. 嵌入层 (Embedding Layer)2.2. 定义前向传播3. 训练…

Python实现对大批量Word文档进行自动添加页码(16)

前言 本文是该专栏的第16篇,后面会持续分享Python办公自动化干货知识,记得关注。 在处理word文档的时候,相信或多或少都遇到过这样的需求——需要对“目标word文档,自动添加页码”。 换言之,如果有大批量的word文档文件需要你添加页码,这个时候最聪明的办法就是使用“程…

云原生安全:Linux命令行操作全解析

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从基础概念到安全实践的完整指南 一、基础概念 1. Shell与终端交互 Shell是Linux命令行的解释器(如Bash、Zsh),负…

Day 34

GPU训练 要让模型在 GPU 上训练,主要是将模型和数据迁移到 GPU 设备上。 在 PyTorch 里,.to(device) 方法的作用是把张量或者模型转移到指定的计算设备(像 CPU 或者 GPU)上。 对于张量(Tensor)&#xff1…

C++笔试题(金山科技新未来训练营):

题目分布: 17道单选(每题3分)3道多选题(全对3分,部分对1分)2道编程题(每一道20分)。 不过题目太多,就记得一部分了: 单选题: static变量的初始…

Spark(29)基础自定义分区器

(一)什么是分区 【复习提问:RDD的定义是什么?】 在 Spark 里,弹性分布式数据集(RDD)是核心的数据抽象,它是不可变的、可分区的、里面的元素并行计算的集合。 在 Spark 中&#xf…

python打卡训练营打卡记录day35

知识点回顾: 三种不同的模型可视化方法:推荐torchinfo打印summary权重分布可视化进度条功能:手动和自动写法,让打印结果更加美观推理的写法:评估模式 作业:调整模型定义时的超参数,对比下效果 1…

【MySQL】07.表内容的操作

1. insert 我们先创建一个表结构,这部分操作我们使用这张表完成我们的操作: mysql> create table student(-> id int primary key auto_increment,-> name varchar(20) not null,-> qq varchar(20) unique-> ); Query OK, 0 rows affec…

使用SQLite Expert个人版VACUUM功能修复数据库

使用SQLite Expert个人版VACUUM功能修复数据库 一、SQLite Expert工具简介 SQLite Expert 是一款功能强大的SQLite数据库管理工具,分为免费的个人版(Personal Edition)和收费的专业版(Professional Edition)。其核心功…

LM-BFF——语言模型微调新范式

gpt3(GPT3——少样本示例推动下的通用语言模型雏形)结合提示词和少样本示例后,展示出了强大性能。但大语言模型的训练门槛太高,普通研究人员无力,LM-BFF(Making Pre-trained Language Models Better Few-shot Learners)的作者受gp…