go入门Windows环境搭建
简介
Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。
根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C++往往给人的感觉是,花了 100%的经历,却只有 60%的开发效率,产出比太低,Java 和 C#的哲学又来源于 C++。并且,随着硬件的不断升级,这些语言不能充分的利用硬件及 CPU。因此,一门高效、简洁、开源的语言诞生了。
Go 语言不仅拥有静态编译语言的安全和高性能,而且又达到了动态语言开发速度和易维护性。有人形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 语言程序的运行速度,又能达到 Python 语言的快速开发。
Windows环境搭建
- 下载golang
Go 官网下载地址
Go 官方镜像站(没有VPN就选择这个地址)
- 安装
- 点击安装即可
- 验证
go version
- 查看go环境
go env
说明:Go1.11 版本之后无需手动配置环境变量,使用 go mod 管理项目,也不需要非得把项目放到 GOPATH 指定目录下,你可以在你磁盘的任何位置新建一个项目。
Go1.13 以后可以彻底不要 GOPATH 了。
说白了就是让用户更简单的使用go
开发工具
-
goland
-
vscode
个人喜欢jetbrains所有产品,但是由于需要收费(你懂的),所以这里暂时用vscode。
- vscode安装
详细安装参考这篇博客
- vscode安装go插件
- 本地创建一个目录
- vscode打开这个目录
创建一个以go结尾的文件,vscode就会识别出用go插件解析:
此时就会让安装go提示工具,安装即可
注意如果vscode写代码没有提示,可以配置下面环境变量
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn //将代理设置为国内源
- GO111MODULE 是 Go 1.11 引入的一个环境变量,用于控制 Go 模块(Module)的行为。设置为 on 表示强制启用 Go 模块模式,无论项目是否在 GOPATH 目录下。在模块模式下,Go 会忽略 GOPATH 和 vendor 目录,转而使用 go.mod 文件来管理依赖。
- GOPROXY 是 Go 模块模式下用于指定模块代理服务器的环境变量。默认情况下,Go 会直接从版本控制系统(如 GitHub)下载依赖模块,但在国内访问这些源可能会比较慢或不稳定。
设置为 https://goproxy.cn 表示使用国内的 Go 模块代理服务器,这样可以加速依赖模块的下载。
- 编写hello world代码进行测试
后记
vscode和goland体验差距太大了:
-
如果仍然有出现写代码没有提示的情况,那么请手动安装相关的包:
把所有的包都选上安装,最好有VPN
然后重启vscode。
此时就会自动安装,安装成功后就会有提示了。
-
需要手动初始化模块,否则提示:initialization failed: packages.Load error: err: exit status 1: stderr: go: go.mod file not found in current directory or any parent directory; see 'go help modules’go list。
这意味着你的项目目录中没有 go.mod 文件,而 Go 工具链期望在模块模式下工作。
此时只要执行下面命令:
go mod init <module-name>
此时项目根目录就会多了一个go.mod文件,并且提示信息也没有了
go.mod简介
go.mod
文件是 Go 语言中用于模块管理的核心文件。它定义了当前项目的模块路径、Go 版本以及项目所依赖的其他模块(第三方库或内部模块)。Go 模块(Module)是 Go 1.11 版本引入的依赖管理机制,用于取代旧的 GOPATH
模式。
go.mod
文件的作用
-
定义模块路径:
go.mod
文件的第一行通常定义了模块的名称(模块路径),例如:
这个路径是唯一的,通常与代码仓库的路径一致,用于标识模块。module github.com/username/myproject
-
管理依赖:
go.mod
文件会记录项目所依赖的其他模块及其版本。例如:
这些依赖项会在运行require (github.com/gin-gonic/gin v1.9.1golang.org/x/sync v0.3.0 )
go mod tidy
或go build
时自动下载到本地。
-
锁定依赖版本:
- 除了
go.mod
文件,Go 还会生成一个go.sum
文件,用于记录依赖模块的完整哈希值,确保每次构建时使用的依赖版本一致,避免因依赖版本不一致导致的问题。
- 除了
-
指定 Go 版本:
go.mod
文件可以指定项目所需的 Go 版本,例如:
这表示该项目需要 Go 1.20 或更高版本来编译。go 1.20
-
支持模块化开发:
- Go 模块允许你将代码拆分为多个模块,每个模块可以独立管理依赖和版本,适合大型项目或微服务架构。
go.mod
文件的结构
一个典型的 go.mod
文件如下:
module github.com/username/myprojectgo 1.20require (github.com/gin-gonic/gin v1.9.1golang.org/x/sync v0.3.0
)replace github.com/old/module => github.com/new/module v1.2.3exclude github.com/deprecated/module v1.0.0
module
:定义模块路径。go
:指定 Go 版本。require
:列出项目依赖的模块及其版本。replace
:用于替换某个依赖模块的路径或版本(例如,使用本地的模块或 fork 的模块)。exclude
:排除某个模块的特定版本。
如何生成 go.mod
文件
如果你还没有 go.mod
文件,可以通过以下命令生成:
go mod init <module-name>
例如:
go mod init github.com/username/myproject
运行后,Go 会生成一个 go.mod
文件,并根据项目中的 import
语句自动添加依赖。
常用的 Go 模块命令
go mod init
:初始化模块,生成go.mod
文件。go mod tidy
:根据代码中的import
语句,自动添加或删除go.mod
中的依赖。go mod download
:下载依赖模块到本地缓存(通常在$GOPATH/pkg/mod
目录下)。go mod vendor
:将依赖复制到项目的vendor
目录中,用于离线构建。go list -m all
:列出当前模块的所有依赖。
为什么需要 go.mod
文件?
在 Go 1.11 之前,Go 使用 GOPATH
模式管理代码和依赖,所有项目都必须放在 GOPATH
目录下,且依赖管理非常不方便。引入 go.mod
文件后:
- 项目可以放在任何位置。
- 依赖版本可以精确控制。
- 支持模块化开发,适合现代软件工程实践。
参考文献
https://go.dev/doc/tutorial/getting-started
https://gobyexample.com/
https://www.w3schools.com/go/
https://go.dev/doc/tutorial/
https://www.geeksforgeeks.org/golang-tutorial-learn-go-programming-language/
相关文章:

go入门Windows环境搭建
简介 Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。 根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C往往给人的感觉是&a…...

安装Ubuntu22.04
1.引用教程 如何安装Ubuntu Server 22.04 LTS_ubuntu22.04 server-CSDN博客 2.空间分配 要使用 docker 比较多所以分别的 docker 空间大...

对比OpenAI的AI智能体Operator和智谱的GLM-PC,它们有哪些不同?
OpenAI 的 AI 智能体 Operator 和智谱的 GLM-PC 有以下不同: 功能侧重 Operator:主要侧重于网页操作,能在网页上模拟人类进行点击、输入等操作,完成如预订旅行住宿、餐厅预约、在线购物、在 Arxiv 上进行论文分类搜索等任务123。…...

Git Bash 配置 zsh
博客食用更佳 博客链接 安装 zsh 安装 Zsh 安装 Oh-my-zsh github仓库 sh -c "$(curl -fsSL https://install.ohmyz.sh/)"让 zsh 成为 git bash 默认终端 vi ~/.bashrc写入: if [ -t 1 ]; thenexec zsh fisource ~/.bashrc再重启即可。 更换主题 …...

美格智能AIMO智能体+DeepSeek-R1模型,AI应用的iPhone时刻来了
导语: 当AI大模型从云端下沉至终端设备,一场关于效率、隐私与智能化的革命悄然展开。作为全球领先的无线通信模组及解决方案提供商,美格智能凭借其高算力AI模组矩阵与端侧大模型部署经验,结合最新发布的AIMO智能体产品࿰…...

Python标准库 - os (1) 环境变量、进程的用户和组
文章目录 1 访问和修改环境变量1.1 访问环境变量1.2 修改环境变量 2 进程的用户和组2.1 进程的ID2.2 进程的用户2.3 进程组 os模块提供了各种操作系统接口。包括环境变量、进程管理、进程调度、文件操作等方面。 这里整理了环境变量、进程的用户和用户组相关的控制方法。 参考…...

QT 通过ODBC连接数据库的好方法:
效果图: PWD使用自己的,我的这是自己的,所以你用不了。 以下是格式。 // 1. 设置数据库连接 QSqlDatabase db QSqlDatabase::addDatabase("QODBC");// 建立和QMYSQL数据库的连接 // 设置数据库连接名称(DSN&am…...

机器学习 - 初学者需要弄懂的一些线性代数的概念
一、单位矩阵 在数学中,单位矩阵是一个方阵,其主对角线上的元素全为1,其余元素全为0。单位矩阵在矩阵乘法中起到类似于数字1在数值乘法中的作用,即任何矩阵与单位矩阵相乘,结果仍为原矩阵本身。 单位矩阵的定义&…...

WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据
简介 在这个系列的上一篇文章中,我们介绍了ESP32 I2S音频总线的相关知识,简要了解了什么是I2S总线、它的通信格式,以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾: ESP32 I2S音频总线学习笔记(一&a…...

本地大模型编程实战(03)语义检索(2)
文章目录 准备按批次嵌入加载csv文件,分割文档并嵌入测试嵌入效果总结代码 上一篇文章: 本地大模型编程实战(02)语义检索(1) 详细介绍了如何使用 langchain 实现语义检索,为了演示方便,使用的是 langchain 提供的内存数据库。 在实…...

LabVIEW橡胶动态特性测试系统
本文介绍了一个利用LabVIEW软件和NI高速数据采集设备构建的橡胶动态特性测试系统。该系统实现了橡胶材料动态性能的精确测量,并通过虚拟仪器技术,提高了测试数据的处理效率和准确性。系统支持实时数据处理和多种信号的动态分析,适用于工业和科…...

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识
1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架,设计目的是简化搭建及开发过程,并不是对Spring功能上的增强,而是提供了一种快速使用Spr…...

使用 Vue 3 的 watchEffect 和 watch 进行响应式监视
Vue 3 的 Composition API 引入了 <script setup> 语法,这是一种更简洁、更直观的方式来编写组件逻辑。结合 watchEffect 和 watch,我们可以轻松地监视响应式数据的变化。本文将介绍如何使用 <script setup> 语法结合 watchEffect 和 watch&…...

Vue.js 高级组件开发
Vue.js 高级组件开发:构建一个智能动态表单生成器 ——从可复用架构到性能优化的全链路实践 引言:为什么需要高级组件? 在现代前端开发中,组件不仅是UI的封装,更是业务逻辑的载体。一个“高级”Vue组件应当具备&…...

React应用深度优化与调试实战指南
一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…...

Linux 内核学习(4) --- devfreq 动态调频框架
目录 Linux devfreq 简介核心数据结构devfreq_dev_profile 结构体devfreq_governor 结构体devfreq 结构体 工作流程devFreq framework 初始化governor 初始化devfreq Device 注册动态变频的实现device_unregister 流程 用户空间节点参考文章 Linux devfreq 简介 现在的 Soc 由…...

Spring Boot 无缝集成SpringAI的函数调用模块
这是一个 完整的 Spring AI 函数调用实例,涵盖从函数定义、注册到实际调用的全流程,以「天气查询」功能为例,结合代码详细说明: 1. 环境准备 1.1 添加依赖 <!-- Spring AI OpenAI --> <dependency><groupId>o…...

Ansible自动化运维实战--yaml的使用和配置(7/8)
文章目录 一、YAML 基本语法1.1. 缩进1.2. 注释1.3. 列表1.4. 字典 二、Ansible 中 YAML 的应用2.1. Ansible 剧本(Playbooks)2.2. 变量定义2.3. 角色(Roles)2.4. Inventory 文件2.5. 数据类型2.6. 引用变量 在 Ansible 里&#x…...

kamailio-5.8.4-centos9编译
安装必要的依赖包 在开始编译之前,你需要安装编译 Kamailio 所需的一些基础依赖包: dnf install -y make gcc gcc-c flex bison libxml2-devel openssl-devel sqlite-devel mysql-devel pcre-devel libcurl-devel下载并解压 Kamailio 源码包 假设你已经…...

单例模式 - 单例模式的实现与应用
引言 单例模式(Singleton Pattern)是设计模式中最简单且最常用的模式之一。它确保一个类只有一个实例,并提供一个全局访问点来访问该实例。单例模式常用于需要全局唯一对象的场景,如配置管理、日志记录、线程池等。 本文将详细介…...

hadoop==docker desktop搭建hadoop
hdfs map readuce yarn https://medium.com/guillermovc/setting-up-hadoop-with-docker-and-using-mapreduce-framework-c1cd125d4f7b 清理资源 docker-compose down docker system prune -f...

zookeeper的介绍和简单使用
1 zookerper介绍 zookeeper是一个开源的分布式协调服务,由Apache软件基金会提供,主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务,帮助构建可靠的分布式系统。 Zookeeper的特点和功能…...

DiffuEraser: 一种基于扩散模型的视频修复技术
视频修复算法结合了基于流的像素传播与基于Transformer的生成方法,利用光流信息和相邻帧的信息来恢复纹理和对象,同时通过视觉Transformer完成被遮挡区域的修复。然而,这些方法在处理大范围遮挡时常常会遇到模糊和时序不一致的问题࿰…...

CentOS/Linux Python 2.7 离线安装 Requests 库解决离线安装问题。
root@mwcollector1 externalscripts]# cat /etc/os-release NAME=“Kylin Linux Advanced Server” VERSION=“V10 (Sword)” ID=“kylin” VERSION_ID=“V10” PRETTY_NAME=“Kylin Linux Advanced Server V10 (Sword)” ANSI_COLOR=“0;31” 这是我系统的版本,由于是公司内网…...

World of Warcraft [CLASSIC] Jewelcrafting Gemstone 2
World of Warcraft [CLASSIC] Jewelcrafting & Gemstone 2 珠宝加工与常用宝石列表(紫色史诗级): World of Warcraft [CLASSIC] Jewelcrafting & Gemstone_wlk宝石属性一览表-CSDN博客...

AI刷题-最小化团建熟悉程度和
目录 问题描述 输入格式 输出格式 解题思路: 状态表示 状态转移 动态规划数组 预处理 实现: 1.初始化: 2.动态规划部分: (1)对于已分组状态的,跳过: (2&…...

一文详解Filter类源码和应用
背景 在日常开发中,经常会有需要统一对请求做一些处理,常见的比如记录日志、权限安全控制、响应处理等。此时,ServletApi中的Filter类,就可以很方便的实现上述效果。 Filter类 是一个接口,属于 Java Servlet API 的一部…...

应用层协议 HTTP 讲解实战:从0实现HTTP 服务器
🌈 个人主页:Zfox_ 🔥 系列专栏:Linux 目录 一:🔥 HTTP 协议 🦋 认识 URL🦋 urlencode 和 urldecode 二:🔥 HTTP 协议请求与响应格式 🦋 HTTP 请求…...

DDD-全面理解领域驱动设计中的各种“域”
一、DDD-领域 在领域驱动设计(Domain-Driven Design,DDD)中,**领域(Domain)**指的是软件系统所要解决的特定业务问题的范围。它涵盖了业务知识、规则和逻辑,是开发团队与领域专家共同关注的核心…...