【Go】从0开始学习Go

文章目录

  • 从0开始学习Go
    • 0 与C++对比
    • 1 代码框架
      • 1.1 helloworld式代码示例
      • 1.2 主体代码元素(核心三部分)
      • 1.3 其他
    • 2 与C/C++区别
    • 3 有用的小工具
    • 4 注意事项

从0开始学习Go

0 与C++对比

特性C++Go
编译型语言需要编译为机器码直接编译为二进制可执行文件
静态类型类型在编译时确定类型系统更严格,支持类型推断
指针操作支持指针(包括多级指针)支持指针(但无指针运算)
控制结构if/else for switch 相同语法更简洁(省略括号)
函数多返回值需通过引用参数或结构体返回原生支持多返回值
领域C++ 特性Go 特性
内存管理手动管理(new/delete)自动垃圾回收(GC)
并发模型基于线程(std::thread)和锁原生协程(goroutine)和通道(channel)
面向对象类继承、多态、运算符重载通过接口(interface)和组合实现多态
错误处理异常机制(try/catch)显式错误返回(多返回值模式)
包管理头文件包含(#include)模块化设计(go.mod 依赖管理)
泛型模板(template)1.18+ 支持泛型(语法更简单)
编译速度较慢(尤其大型项目)极快(依赖分析高效)

1 代码框架

1.1 helloworld式代码示例

package mainimport "fmt"func main() {fmt.Println("Hello, world!")
}

1.2 主体代码元素(核心三部分)

  • package
    • 包,表示一组代码。每个go文件都以package开头
  • import
    • 导入其他包
  • func
    • 即function,由一行或多行代码组成的组,可被其他程序调用。
    • go程序运行时会寻找main,并首先运行

1.3 其他

  1. 并发编程

    • 关键模式转换:
      // 传统线程 → Go协程
      go func() {  // 启动一个协程// 并发任务
      }()// 共享内存 → 通道通信
      ch := make(chan int)
      go func() { ch <- 42 }()
      value := <-ch
      
  2. 接口与组合

    • 面向对象思维转换:
      type Writer interface {Write([]byte) (int, error)
      }type FileWriter struct { /* 字段 */ }
      func (fw FileWriter) Write(data []byte) (int, error) {// 实现接口
      }
      

2 与C/C++区别

  1. 不以分号结尾,但可以用来分隔语句(不推荐)

3 有用的小工具

  1. go fmt
    go自带格式化工具,不需要像c++一样借助clang等工具

  2. go test
    go test -bench . # 基准测试

  3. go tool
    go tool pprof # 性能剖析

  4. 依赖管理

    • 创建模块:
      go mod init your-project
      go get github.com/gin-gonic/gin@v1.7.7
      

4 注意事项

  • 需避免的常见陷阱
    1. 过度设计

      • ❌ 用 C++ 的类层次结构设计 Go 程序
      • ✅ 使用小而精的接口 + 组合
    2. 并发误用

      • ❌ 直接共享内存(sync.Mutex 不是首选方案)
      • ✅ 优先使用通道通信
    3. 错误处理

      • ❌ 忽略错误返回值
      • ✅ 始终检查错误:
        if result, err := someFunc(); err != nil {// 处理错误
        }
        

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

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

相关文章

简单说一下 Webpack分包

最近在看有关webpack分包的知识&#xff0c;搜索了很多资料&#xff0c;感觉这一块很是迷惑&#xff0c;网上的资料讲的也迷迷糊糊&#xff0c;这里简单总结分享一下&#xff0c;也当个笔记。 如有错误请指出。 为什么需要分包 我们知道&#xff0c;webpack的作用&#xff0c…

使用Python和FastAPI构建网站爬虫:Oncolo医疗文章抓取实战

使用Python和FastAPI构建网站爬虫&#xff1a;Oncolo医疗文章抓取实战 前言项目概述技术栈代码分析1. 导入必要的库2. 初始化FastAPI应用3. 定义请求模型4. 核心爬虫功能4.1 URL验证和准备4.2 设置HTTP请求4.3 发送请求和解析HTML4.4 提取文章内容4.5 保存结果和返回数据 5. AP…

YoloV8改进策略:卷积篇|风车卷积|即插即用

文章目录 论文信息论文翻译摘要引言相关研究红外搜索与跟踪检测和分割网络红外搜索与跟踪数据集的损失函数红外搜索与跟踪数据集方法风车形卷积(PConv)基于尺度的动态损失SIRST - UAVB数据集实验实验设置与其他方法的比较多模型上的消融实验结论致谢代码改进方法测试结果总结…

【NLP】36. 从指令微调到人类偏好:构建更有用的大语言模型

从指令微调到人类偏好&#xff1a;构建更有用的大语言模型 大语言模型&#xff08;LLMs&#xff09;已经成为现代自然语言处理系统的核心&#xff0c;但单纯依赖传统语言建模目标&#xff0c;往往难以满足实际应用的“人类意图”。从 Instruction Tuning&#xff08;指令微调&…

基于Transformers与深度学习的微博评论情感分析及AI自动回复系统

前言 这个项目存在cookie没有自动更新问题&#xff0c;后续可能会发出来解决教程&#xff0c;还有微博网页版的话最多看到300条评论&#xff0c;而且回复别人信息的话最多回复15条就要休息5分钟左右才能评论 1. 项目概述 本项目实现了一个微博评论自动化处理系统&#xff0c…

详解 Zephyr RTOS:架构、功能与开发指南

目录 Zephyr RTOS 的核心特性 1. 轻量级和可扩展性 2. 实时性能 3. 多平台支持 4. 安全性 5. 社区和生态系统 Zephyr 的架构 1. 内核 2. 驱动模型 3. 网络栈 4. 文件系统 开发环境和工具链 安装和配置 开发流程 1. 应用程序开发 2. 调试和测试 3. 部署 实际应…

人工智能重塑医疗健康:从辅助诊断到个性化治疗的全方位变革

人工智能正在以前所未有的速度改变着医疗健康领域&#xff0c;从影像诊断到药物研发&#xff0c;从医院管理到远程医疗&#xff0c;AI 技术已渗透到医疗服务的各个环节。本文将深入探讨人工智能如何赋能医疗健康产业&#xff0c;分析其在医学影像、临床决策、药物研发、个性化医…

Linux笔记---内核态与用户态

用户态&#xff08;User Mode&#xff09; 权限级别&#xff1a;较低&#xff0c;限制应用程序直接访问硬件或关键系统资源。 适用场景&#xff1a;普通应用程序的运行环境。 限制&#xff1a;无法执行特权指令&#xff08;如操作I/O端口、修改内存管理单元配置等&#xff09…

Spring 代理与 Redis 分布式锁冲突:一次锁释放异常的分析与解决

Spring 代理与 Redis 分布式锁冲突&#xff1a;一次锁释放异常的分析与解决 Spring 代理与 Redis 分布式锁冲突&#xff1a;一次锁释放异常的分析与解决1. 问题现象与初步分析2 . 原因探究&#xff1a;代理机制对分布式锁生命周期的干扰3. 问题复现伪代码4. 解决方案&#xff1…

SQL:多列匹配(Multiple-column Matching)

目录 基础概念 应用场景详解 1. 多列等值匹配 2. 多列 IN 匹配&#xff08;集合匹配&#xff09; 3. 多列 JOIN 匹配&#xff08;复合键连接&#xff09; 4. 多列匹配 子查询 5. 多列匹配 EXISTS 6. 多列匹配 UNION&#xff08;组合数据源&#xff09; 7. 多列匹配…

基于DeepSeek的智能客服系统实践与创新

引言:AI大模型重塑客户服务新范式 近年来,AI大模型技术的突破性进展正在深刻改变传统客户服务模式。作为国内领先的AI企业,DeepSeek凭借其创新的算法架构(如MoE混合专家模型、动态学习率调度器)和极致的成本效益(仅为同类模型成本的1/20),在自然语言理解、情感分析、多…

SGLang和vllm比有什么优势?

环境&#xff1a; SGLang vllm 问题描述&#xff1a; SGLang和vllm比有什么优势&#xff1f; 解决方案&#xff1a; SGLang和vLLM都是在大语言模型&#xff08;LLM&#xff09;推理和部署领域的开源项目或框架&#xff0c;它们各自有不同的设计目标和优势。下面我综合目前…

三、Hive DDL数据库操作

在 Apache Hive 中&#xff0c;数据库 (Database)&#xff0c;有时也被称为模式 (Schema)&#xff0c;是组织和管理 表及其他对象的基本命名空间单元。熟练掌握数据库层面的数据定义语言 (DDL) 操作&#xff0c;是构建清晰、有序的 Hive 数据仓库的第一步。本篇笔记将详细梳理 …

Redis(2):Redis + Lua为什么可以实现原子性

Redis 作为一款高性能的键值对存储数据库&#xff0c;与 Lua 脚本相结合&#xff0c;为实现原子性操作提供了强大的解决方案&#xff0c;本文将深入探讨 Redis Lua 实现原子性的相关知识 原子性概念的厘清 在探讨 Redis Lua 的原子性之前&#xff0c;我们需要明确原子性的概念…

科普:极简的AI乱战江湖

本文无图。 大模型 ‌2022年2月&#xff0c;‌文生图应用的鼻祖Midjourney上线。 ‌2022年8月&#xff0c;‌开源版的Midjourney&#xff0c;也就是Stable Diffusion上线。 2022年11月30日‌&#xff0c;OpenAI正式发布ChatGPT-3.5。 此后&#xff0c;不断有【大模型】面世&…

CSS- 4.5 css + div 布局 简易网易云音乐 官网布置实例

本系列可作为前端学习系列的笔记&#xff0c;代码的运行环境是在HBuilder中&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 HTML系列文章 已经收录在前端专栏&#xff0c;有需要的宝宝们可以点击前端专栏查看&#xff01; 点…

【滑动窗口】LeetCode 1004题解 | 最大连续1的个数 Ⅲ

最大连续1的个数 Ⅲ 一、题目链接二、题目三、题目解析四、算法原理解法一&#xff1a;暴力枚举 zero计数器解法二&#xff1a;滑动窗口 五、编写代码六、时空复杂度 一、题目链接 最大连续1的个数 Ⅲ 二、题目 三、题目解析 注意题目中说的是最多k次&#xff0c;在一个数组…

PyTorch音频处理技术及应用研究:从特征提取到相似度分析

文章目录 音频处理技术及应用音频处理技术音视频摘要技术音频识别及应用 梅尔频率倒谱系数音频特征尔频率倒谱系数简介及参数提取过程音频处理快速傅里叶变换(FFT)能量谱处理离散余弦转换 练习案例&#xff1a;音频建模加载音频数据源波形变换的类型绘制波形频谱图波形Mu-Law 编…

鸿蒙OSUniApp 实现的语音输入与语音识别功能#三方框架 #Uniapp

UniApp 实现的语音输入与语音识别功能 最近在开发跨平台应用时&#xff0c;客户要求添加语音输入功能以提升用户体验。经过一番调研和实践&#xff0c;我成功在UniApp项目中实现了语音输入与识别功能&#xff0c;现将过程和方法分享出来&#xff0c;希望对有类似需求的开发者有…

2025年卫星遥感行业最新发展趋势深度分析

一、国内发展趋势&#xff1a;政策引领与技术突破双轮驱动 &#xff08;一&#xff09;政策体系持续完善&#xff0c;顶层设计深化行业发展 国家级战略与标准体系构建 中国政府将卫星遥感产业纳入“十四五”规划核心战略&#xff0c;明确构建“通导遥”一体化空间基础设施。20…