Go语言入门基础详解

一、语言历史背景

Go语言由Google工程师Robert Griesemer、Rob Pike和Ken Thompson于2007年设计,2009年正式开源。设计目标:

  • 兼具Python的开发效率与C的执行性能
  • 内置并发支持(goroutine/channel)
  • 简洁的类型系统
  • 现代化的包管理
  • 跨平台编译能力
// 经典Hello World示例
package main  // 声明包名import "fmt"  // 导入标准库func main() {  // 程序入口fmt.Println("Hello, 世界!")  // 调用标准库输出
}

二、语言工作原理

  1. 编译过程
    • 源代码 → 词法分析 → 语法树 → 中间代码 → 机器码
    • 生成静态二进制文件,无外部依赖
  2. 执行方式
    go run main.go    # 直接运行
    go build main.go  # 编译生成可执行文件
    
  3. 跨平台编译:
    GOOS=linux GOARCH=amd64 go build -o app
    

三、开发工具推荐

工具类型推荐方案
代码编辑器VS Code + Go插件
专业IDEGoLand
调试工具Delve (dlv)
包管理Go Modules
格式化工具gofmt + goimports

四、语言核心语法

1. 变量与常量

func variables() {// 短声明(函数内可用)a := 10  // 标准声明var b string = "golang"// 批量声明var (c intd bool)// 常量声明const PI = 3.14const (STATUS_OK = 200NOT_FOUND = 404)// iota枚举const (_ = iotaKB = 1 << (10 * iota)  // 1 << 10MB                      // 1 << 20)
}

2. 数据类型

type User struct {  // 结构体定义ID       intUsername string
}func dataTypes() {// 基本类型var num int = 42str := "go"// 复合类型arr := [3]int{1,2,3}       // 数组slice := []string{"a","b"} // 切片m := map[string]int{"x":1} // 映射// 指针ptr := &num// 接口类型var writer io.Writer = os.Stdout
}

3. 控制结构

func controlFlow() {// if条件判断if x := 10; x > 5 {fmt.Println("x大于5")}// for循环(无while)for i := 0; i < 5; i++ {fmt.Println(i)}// range迭代nums := []int{2,4,6}for idx, val := range nums {fmt.Printf("索引:%d 值:%d\n", idx, val)}// switch语句switch time.Now().Weekday() {case time.Saturday, time.Sunday:fmt.Println("周末")default:fmt.Println("工作日")}
}

4. 函数特性

// 多返回值函数
func divide(a, b float64) (float64, error) {if b == 0 {return 0, errors.New("除数不能为零")}return a / b, nil
}// 命名返回值
func sum(nums ...int) (total int) {for _, n := range nums {total += n}return
}// 匿名函数
func anonymous() {square := func(x int) int {return x * x}fmt.Println(square(5))
}

5. 并发模型

func concurrency() {var wg sync.WaitGroup// 启动goroutinewg.Add(1)go func() {defer wg.Done()fmt.Println("异步执行")}()// Channel通信ch := make(chan int)go func() {ch <- 42  // 发送数据}()val := <-ch  // 接收数据wg.Wait()fmt.Println("接收值:", val)
}

6. 错误处理

func errorHandling() {// 常规错误处理f, err := os.Open("file.txt")if err != nil {log.Fatal(err)}defer f.Close()  // 确保资源释放// panic恢复defer func() {if r := recover(); r != nil {fmt.Println("Recovered:", r)}}()panic("触发panic")
}

五、实战案例

案例1:HTTP服务器

package mainimport ("fmt""net/http"
)func main() {// 注册路由处理函数http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "欢迎访问!路径:%s", r.URL.Path)})// 启动服务器fmt.Println("服务器运行在 :8080")http.ListenAndServe(":8080", nil)
}

案例2:并发文件处理

package mainimport ("fmt""io/ioutil""sync"
)func processFile(path string, wg *sync.WaitGroup) {defer wg.Done()data, err := ioutil.ReadFile(path)if err != nil {fmt.Printf("读取%s失败: %v\n", path, err)return}fmt.Printf("文件%s大小: %d字节\n", path, len(data))
}func main() {files := []string{"a.txt", "b.txt", "c.txt"}var wg sync.WaitGroupfor _, f := range files {wg.Add(1)go processFile(f, &wg)}wg.Wait()fmt.Println("所有文件处理完成")
}

六、包管理(Go Modules)

  1. 初始化模块:
    go mod init example.com/myproject
    
  2. 示例go.mod:
    module example.com/myprojectgo 1.20require (github.com/gin-gonic/gin v1.9.0golang.org/x/sync v0.1.0
    )
    

本文涵盖Go语言核心知识点,建议通过以下步骤深入学习:

  1. 完成官方Tour教程(tour.golang.org)
  2. 阅读《Go语言圣经》
  3. 参与开源项目(GitHub Trending)
  4. 实践Web开发(Gin/Echo框架)
  5. 学习并发模式(《Concurrency in Go》)

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

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

相关文章

Linux 文件权限类

目录 文件属性 从左到右的10个字符表示 rwx作用文件和目录的不同解释 图标&#xff1a; 案例实操 chmod 改变权限 基本语法 经验技巧 案例实操 拓展&#xff1a;可以通过一个命令查看用户列表 chown改变所有者 基本语法 选项说明 案例实操 chgrp 改变所属组 基…

DeepSeek技术解析:MoE架构实现与代码实战

以下是一篇结合DeepSeek技术解析与代码示例的技术文章&#xff0c;重点展示其核心算法实现与落地应用&#xff1a; DeepSeek技术解析&#xff1a;MoE架构实现与代码实战 作为中国AI领域的创新代表&#xff0c;DeepSeek在混合专家模型&#xff08;Mixture of Experts, MoE&…

vue3:八、登录界面实现-页面初始搭建、基础实现

一、初始工作 1、创建登录文件 在src/views中创建文件LoginView.vue文件 2、创建路由 在router/index.js中增加登录的信息 代码 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue const router createRouter({hist…

dify+mysql的诗词助手

目录 数据库表结构&#xff1a; 数据库查询的http服务搭建&#xff1a; 流程引擎搭建&#xff1a; 开始&#xff0c; HTTP查询数据库&#xff0c; LLM数据分析&#xff0c; 直接回复&#xff0c; 效果测试&#xff1a; 下载链接&#xff1a; 数据库表结构&#xff1a;…

jenkins 配置邮件问题整理

版本&#xff1a;Jenkins 2.492.1 插件&#xff1a; A.jenkins自带的&#xff0c; B.安装功能强大的插件 配置流程&#xff1a; 1. jenkins->系统配置->Jenkins Location 此处的”系统管理员邮件地址“&#xff0c;是配置之后发件人的email。 2.配置系统自带的邮件A…

谷歌Chrome或微软Edge浏览器修改网页任意内容

在谷歌或微软浏览器按F12&#xff0c;打开开发者工具&#xff0c;切换到console选项卡&#xff1a; 在下面的输入行输入下面的命令回车&#xff1a; document.body.contentEditable"true"效果如下&#xff1a;

blender使用初体验(甜甜圈教程)

使用blender 建模了甜甜圈&#xff0c;时间空闲了&#xff0c;但愿能创建点好玩的吸引人的东西

Adobe Firefly 技术浅析(三):GANs 的改进

生成式对抗网络(GANs)在图像生成领域取得了显著的进展,但原始的 GANs 在训练稳定性、生成质量以及多样性方面存在一些挑战。Adobe Firefly 在其图像生成技术中采用了多种改进的 GANs 方法,以提高生成图像的质量和多样性。 1. 条件生成式对抗网络(cGANs) 1.1 基本原理 …

go GRPC学习笔记

本博文源于笔者正在学习的gprc&#xff0c;相关配套书籍素材来源是《Go编程进阶实战》&#xff0c;博文内容主要包含了RPC模式讲解&#xff0c;RPC通过htttp访问、拦截器、提高服务端与客户端容错的内容配置 在此之前需要下载protoc&#xff0c;这里不做下载过程 1、RPC模式 …

CentOS 系统安装 docker 以及常用插件

博主用的的是WindTerm软件链接的服务器&#xff0c;因为好用 1.链接上服务器登入后&#xff0c;在/root/目录下 2.执行以下命令安装docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…

MindGYM:一个用于增强视觉-语言模型推理能力的合成数据集框架,通过生成自挑战问题来提升模型的多跳推理能力。

2025-03-13&#xff0c;由中山大学和阿里巴巴集团的研究团队提出了MindGYM框架&#xff0c;通过合成自挑战问题来增强视觉-语言模型&#xff08;VLMs&#xff09;的推理能力。MindGYM框架通过生成多跳推理问题和结构化课程训练&#xff0c;显著提升了模型在推理深度和广度上的表…

论文阅读笔记——LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

LoRA 论文 传统全面微调&#xff0c;对每个任务学习的参数与原始模型相同&#xff1a; m a x Φ ∑ ( x , y ) ∈ Z ∑ t 1 ∣ y ∣ l o g ( P Φ ( y t ∣ x , y < t ) ) 式(1) max_{\Phi}\sum_{(x,y)\in Z}\sum^{|y|}_{t1}log(P_{\Phi}(y_t|x,y<t)) \qquad \text{式(…

Umi-OCR 全家桶

介绍&#xff1a; 下载 访问官网地址 https://github.com/hiroi-sora/umi-ocrhttps://github.com/hiroi-sora/umi-ocr 点击下载&#xff08;.exe 文件 安装即可&#xff09; 桌面使用 安装完毕后去安装路径下点击 Umi-OCR.exe &#xff08;默认不会生成桌面的快捷方式&…

oracle中OS BLOCK的含义

在Oracle数据库中&#xff0c;OS BLOCK&#xff08;操作系统数据块&#xff09;是指操作系统层面上的数据块&#xff0c;它与Oracle数据库内部的逻辑存储单元BLOCK&#xff08;数据块&#xff09;有所区别但密切相关。以下是对OS BLOCK的详细解释&#xff1a; 定义与概念 OS BL…

mac部署GPT-SoVITS,生成粤语踩坑点及使用记录

自己录音&#xff0c;普通话或者粤语 注意&#xff1a; 与在其他设备上训练的模型相比&#xff0c;在mac上使用gpu训练的模型的质量明显较低&#xff0c;因此我们暂时使用cpu代替。 Install Xcode command-line tools by running xcode-select --install.Install FFmpeg by …

STM32-SPI通信外设

目录 一&#xff1a;SPI外设简介 SPI框图​编辑 SPI逻辑 ​编辑 主模式全双工连续传输 ​编辑 非连续传输 二&#xff1a;硬件SPI读写W25Q64 1.接线&#xff1a; 2. 代码 SPI外设的初始化 生成时序 一&#xff1a;SPI外设简介 STM32内部集成了硬件SPI收发电路&#…

游戏引擎学习第158天

回顾和今天的计划 我们在这里会实时编码一个完整的游戏&#xff0c;没有使用引擎或库&#xff0c;一切都由我们自己做所有的编程工作&#xff0c;游戏中的每一部分&#xff0c;无论需要做什么&#xff0c;我们都亲自实现&#xff0c;并展示如何完成这些任务。今天&#xff0c;…

指令微调 (Instruction Tuning) 与 Prompt 工程

引言 预训练语言模型 (PLMs) 在通用语言能力方面展现出强大的潜力。然而&#xff0c;如何有效地引导 PLMs 遵循人类指令&#xff0c; 并输出符合人类意图的响应&#xff0c; 成为释放 PLMs 价值的关键挑战。 指令微调 (Instruction Tuning) 和 Prompt 工程 (Prompt Engineerin…

实验三 Python 数据可视化 Python 聚类-K-means(CQUPT)

一、实验目的 Python 数据可视化&#xff1a; 1、学习使用 jieba、wordcloud 等类库生成词云图。 2、学习使用 Matplotlib 库进行数据可视化。 Python 聚类-K-means&#xff1a; 1、理解聚类非监督学习方法的基本原理。 2、掌握 Python、numpy、pandas、sklearn 实现聚类…

Linux--git

ok&#xff0c;我们今天来学习如何在Linux上建立链接git 版本控制器Git 不知道你⼯作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防⽌⽂档丢失&#xff0c;更改 失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不…