【GO学习笔记 go基础】编译器下载安装+Go设置代理加速+项目调试+基础语法+go.mod项目配置+接口(interface)
编译器下载&安装
- 下载并安装
go1.23.2.windows-amd64.msi
默认安装再C:\Program Files\Go\
PS C:\Users\kingchuxing\Documents> go version
go version go1.23.2 windows/amd64
Go设置GOPROXY国内加速
- windows
// 启用 Go Modules 功能
PS C:\Users\kingchuxing\Documents\GO_PORJECTS\test> $env:GO111MODULE="on"
// 配置 GOPROXY 环境变量,使用七牛云
PS C:\Users\kingchuxing\Documents\GO_PORJECTS\test> $env:GOPROXY="https://goproxy.cn,direct"
// 阿里云 $env:GOPROXY="https://mirrors.aliyun.com/goproxy/,direct"
// 官方 $env:GOPROXY="https://goproxy.io,direct"
vscode插件安装
- 项目调试
基础语法
-
包(Package)
每个Go程序都必须属于某个包,通常是main
包。package main
-
导入包(Import)
使用import
语句导入其他包。import "fmt"
-
函数(Function)
使用func
关键字定义函数。func main() {fmt.Println("Hello, World!") }
-
变量(Variable)
使用var
关键字声明变量,也可以使用短变量声明。var x int = 10 y := 20
:=
是短变量声明(short variable declaration)的语法,用于在函数内部声明和初始化变量。它可以用于定义新的变量,而不需要使用 var 关键字。使用:=
声明的变量会根据右侧的表达式自动推断类型
-
控制结构(Control Structures)
包括条件语句和循环。if x < y {fmt.Println("x is less than y") } else {fmt.Println("x is greater than or equal to y") }for i := 0; i < 5; i++ {fmt.Println(i) }
-
数组和切片(Arrays and Slices)
arr := [5]int{1, 2, 3, 4, 5} slice := []int{1, 2, 3, 4, 5}
-
结构体(Structs)
用于定义自定义数据类型。type Person struct {Name stringAge int }
hello.go
package mainimport "fmt"func main() {fmt.Println("Hello, World!")
}
PS C:\Users\kingchuxing\Documents\GO_PORJECTS\test> go run hello.go
Hello, World!
PS C:\Users\kingchuxing\Documents\GO_PORJECTS\test> go build hello.go
PS C:\Users\kingchuxing\Documents\GO_PORJECTS\test> .\hello.exe
Hello, World!
go.mod 文件
- go.mod 文件是Go模块的配置文件,包含模块路径和依赖版本信息,用于管理项目依赖。
- 下面是一个使用
go.mod
文件的简单示例,包括如何创建一个Go模块并使用它。
步骤 1: 创建一个新目录
首先,在你的工作空间中创建一个新目录,并进入该目录:
mkdir mymodule
cd mymodule
步骤 2: 初始化Go模块
- 使用
go mod init
命令初始化一个新的Go模块。这里我们将模块命名为github.com/yourusername/mymodule
,请根据你的实际情况修改。
go mod init github.com/yourusername/mymodule
这将生成一个 go.mod
文件,内容大致如下:
module github.com/yourusername/mymodulego 1.20 // Go版本
步骤 3: 创建&运行Go源文件
- 按照 https://pkg.go.dev/github.com/francoispqt/onelog#section-readme
- 安装依赖 :
go get github.com/francoispqt/onelog
,go.mod
中indirect
注释的为间接依赖 - 运行:
使用 go.mod
文件来管理 Go 项目:
- 运行代码
使用 go run
命令来运行你的代码:
go run .
- 更新依赖
要更新依赖到最新版本,可以使用:
go get -u
- 清理依赖
如果你希望清理未使用的依赖,可以使用:
go mod tidy
go 调用自己所实现模块示例
- mymodule.go文件:
// mymodule.go
package mysubmoduleimport "fmt"// HelloWorld 打印问候语
func HelloWorld(name string) {fmt.Printf("Hello, %s!\n", name)
}
- go.mod文件
module mymodulego 1.23.2
- main.go文件
package mainimport (mysubmodule "mymodule/mysubmodule" // 导入自定义模块
)func main() {mysubmodule.HelloWorld("Alice") // 调用模块中的函数
}
- 项目结构和运行结果:
go接口(interface)
package mainimport ("fmt"
)// 定义一个接口 Animal,接口中包含一个方法 Speak
type Animal interface {Speak() string // Speak 方法返回一个字符串
}// 定义一个结构体 Dog,表示一种动物
type Dog struct{}// Dog 结构体实现了 Animal 接口的 Speak 方法
func (d Dog) Speak() string { // (d Dog) 是一个方法接收者(method receiver),将方法与类型联系起来return "Woof!" // 返回字符串 "Woof!",表示狗的叫声
}// 定义另一个结构体 Cat,表示另一种动物
type Cat struct{}// Cat 结构体也实现了 Animal 接口的 Speak 方法
func (c Cat) Speak() string {return "Meow!" // 返回字符串 "Meow!",表示猫的叫声
}// 定义一个函数 MakeItSpeak,接受一个 Animal 接口类型的参数
func MakeItSpeak(a Animal) {// 调用参数 a 的 Speak 方法,并将返回值打印到控制台fmt.Println(a.Speak())
}func main() {// 创建一个 Dog 类型的实例dog := Dog{}// 创建一个 Cat 类型的实例cat := Cat{}// 调用 MakeItSpeak 函数,传入 dog 实例MakeItSpeak(dog) // 输出: Woof!// 调用 MakeItSpeak 函数,传入 cat 实例MakeItSpeak(cat) // 输出: Meow!
}
相关文章:

【GO学习笔记 go基础】编译器下载安装+Go设置代理加速+项目调试+基础语法+go.mod项目配置+接口(interface)
编译器下载&安装 下载并安装go1.23.2.windows-amd64.msi默认安装再C:\Program Files\Go\ PS C:\Users\kingchuxing\Documents> go version go version go1.23.2 windows/amd64Go设置GOPROXY国内加速 windows // 启用 Go Modules 功能 PS C:\Users\kingchuxing…...

从0开始学习shell脚本
了解Shell和Shell脚本 Shell:Shell是一个命令解释器,用来执行用户输入的命令。常用的Shell包括Bash、Zsh、Ksh等。Linux默认的Shell通常是Bash。 Shell脚本:Shell脚本是由一系列命令组成的文件,脚本可以运行一连串命令ÿ…...

官方工具重装Windows 11当前版本 /绕过硬件检查/免U盘
官方工具重装Windows 11当前版本 /绕过硬件检查/免U盘 官方工具重装Windows 11当前版本 /绕过硬件检查/免U盘_win11安装跳过检测-CSDN博客...

JavaEE初阶---网络原理/UDP服务器客户端程序
文章目录 1.网络初识2.网络编程2.1TCP/UDP区别介绍2.2UDP的socket api使用2.3UDP协议里面的服务器客户端程序 1.网络初识 网络和计算机类似:都是属于军用》民用; 网络诞生于美苏争霸时期,当时就感觉核战争一触即发,形式非常严峻…...

每天10个vue面试题(六)
1、对Vue设计原则的理解? 渐进式JavaScript框架:与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化…...

Qt:信号和槽
目录 关于信号 connect函数 关于connect connect的使用 自定义信号、自定义槽 自定义槽 第一种方式自定义槽 第二种方式自定义槽 自定义信号 信号槽 带参数的信号槽 参数个数一致的示例 参数个数不一致的示例 Q_OBJECT 信号和槽存在的意义 disconnect函数 使用…...

可以免费商用的字体下载
这里介绍一个开源仓库,收录的可以免费商用的字体,目前中文字体1308款,英文字体980款,共约2288多款字体。 Description Free fonts that can be used commercially.There are currently 1308 Chinese fonts and 980 English font…...

centos7之LVS-TUNNEL模式
介绍 优缺点以及适用场景 优点:能负载更多的Realserver减轻LB的压力。LVS和Realserver可以不再同一网段。 缺点:tun模式的开销比较大(出口流量大),性能不如DR模式。不支持端口转发。后端Realserver系统必须支持tunnel协议。 适用ÿ…...

Linux驱动开发(3):字符设备驱动
上一章节我们了解到什么是内核模块,模块的加载卸载详细过程以及内核模块的使用等内容。 本章,我们将学习驱动相关的概念,理解字符设备驱动程序的基本框架,并从源码上分析字符设备驱动实现和管理。 主要内容有如下五点:…...

刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:
控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息: A 表空间信息 B 创建数据库的时间戳 C 有关数据文件、 联机重做日志文件、和归档重做日志文件的信息 D 数据库名称和数据库唯一标识符(DBID) E RMAN备份…...

Vue Scoped CSS深度解析:原理、误区与最佳实践
引言 在Vue开发中,Scoped CSS是一个强大而复杂的功能。它允许我们将样式限制在特定组件内,但同时也带来了一些细微的行为,可能导致意外的样式"泄漏"。本文将深入探讨Vue Scoped CSS的工作原理,解释常见的误区ÿ…...

744. 寻找比目标字母大的最小字母
目录 题目解法一解法二如何比较字符串letters.back()*upper_bound为什么要加* 题目 给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。 返回 letters 中大于 target 的最小的字符。如果不存在这…...

浅谈QT中Tab键的切换逻辑
浅谈QT中Tab键的切换逻辑 无意中发现在输入界面中按下Tab键时,没有按照预想的顺序切换焦点事件,如下图所示 这个现象还是很有趣,仔细观察了下,默认的切换顺序是按照控件拖入顺序,那么知道了这个问题想要解决起来就很简…...

基于MoviNet检测视频中危险暴力行为
项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【Faster & Mask R-CNN模型实现啤酒瓶瑕疵检测】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生…...

《等保测评:抵御网络威胁的盾牌》
在网络空间的无垠战场上,网络安全威胁如同暗夜之狼,潜伏在每一个角落,随时准备对企业和个人发动致命一击。在这场没有硝烟的战争中,等保测评作为国家网络安全等级保护制度的重要组成部分,犹如坚固的盾牌,为…...

前端必知必会-JavaScript 对象属性
文章目录 JavaScript 对象属性访问 JavaScript 属性添加新属性删除属性嵌套对象 总结 JavaScript 对象属性 对象是无序的属性集合 属性是 JavaScript 对象中最重要的部分。 属性可以更改、添加、删除,有些属性是只读的。 访问 JavaScript 属性 访问对象属性的语…...

双11都有什么值得入手的好物?双十一最建议买的5样东西
双11的脚步逐步渐近,我们点开各大电商平台也可以看到,各个商家已经开始大激烈的促销大战,那么双十一作为一年之中最盛大的购物节,都有什么值得入手的好物呢?今天就给大家建议买的5样东西,从家电好物到生活用…...

Xcode 15.4 运行flutter项目,看不到报错信息详情?
Xcode升级后,遇到了奇怪的事情: 运行flutter项目,左侧栏显示有报错信息,但是点击并没有跳转出具体的error详情。【之前都会自己跳转出来的,升级后真的是无厘头】 方案: 点击左侧导航栏最右边的图标——>…...

AMD开始为基于RDNA的GPU开发自己的神经超采样和去噪技术
NVIDIA 的升级技术已经取得了长足的进步,这些技术解决了现代游戏在开启光线追踪时在苛刻场景中的性能问题。NVIDIA 开始实施各种光线追踪和升级技术后,AMD 和英特尔也紧随其后,推出了自己的 FSR 和 XeSS 升级方法。据报道,AMD 将跟…...

Python中的文件I/O操作
在Python编程中,文件I/O(输入/输出)是一个重要的主题,涉及如何读取和写入文件。无论是处理文本文件还是二进制文件,Python提供了简洁易用的接口。本文将介绍如何在Python中进行文件I/O操作,包括读取、写入和…...

.net framework 3.5sp1开启错误进度条不动如何解决
浏览器地址栏输入www.dnz9.com远程解决netframework问题 在Windows操作系统上安装或启用.NET Framework 3.5 SP1时,如果遇到进度条不动的问题,可能由多种原因引起。以下是一些可能的解决方案: 1. 使用Windows功能对话框 1.打开“控制面板”。…...

什么影响网站的SEO排名
1.多IP多C段配置:海外站群服务器通常提供多IP多C段配置,这使得网站可以拥有多个独立的IP地址,有效避免同一IP下多个网站之间的关联性问题,降低被搜索引擎认为是站群作弊的风险。通过将不同的内容部署在不同的IP地址和C段上&#x…...

css绘制s型(grid)
在之前有通过flex布局实现了s型布局,是通过截取数组形式循环加载数据 这次使用grid直接加载数据通过css实现 <div id"app"><template v-for"(item,inx) in items"><div class"row"><template v-for"(ite…...

【华为HCIP实战课程二十八】中间到中间系统协议IS-IS邻居关系排错,网络工程师
一、ISIS邻居关系条件 1、同一层次(比如Level-2路由器不能和Level-1路由器形成邻居关系) 2、同一区域(L1必须同一区域) 3、同一网段 R1和R2之间分别配置如下IP地址和掩码: R1 的接口S1/0/0掩码为/24 R2的接口S1/0/0配置成掩码/28: 此时R1和R2依然可以建立ISIS邻居关系…...

Word首行空格不显示空格符号问题
Word段落首行空格设置指南 问题描述 在Word中编辑文档时,有时会遇到段落首行敲击空格键却不显示空格的问题。这通常与Word的自动更正设置有关。 解决方法 要解决此问题,需要调整Word的自动更正设置。具体步骤如下: 打开Word的"自动更…...

vue+element上传图片
一、html页面上传图片 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> <…...

用ChatGPT提升工作效率:从理论到实际应用
伴人工智能技术的迅速演进,像ChatGPT这类语言模型已成为提升工作效率的关键工具。这类模型不仅具备处理海量数据的能力,还能自动化许多日常任务,从而提高决策的准确性。本文将深入探讨如何在工作中利用ChatGPT等AI工具提升效率,涵…...

8、Node.js Express框架
五、Express框架 5.1概念 Express框架是一个基于Node.js平台的极简、灵活的WEB开发框架:www.express.com.cn 简单来说,Express是一个封装好的工具包,封装了很多功能,便于我们开发WEB应用 5.2安装 npm i express5.3 Express初体验 //01-express初体验.js //1.导入exrp…...

STM32F103C8T6学习笔记3--按键控制LED灯
1、实验内容 S4、S5分别接PB12和PB13,实验要求,按下S4,D1亮,D2灭;按下S5,D2亮,D1灭。 由于按键学习的是GPIO口的输入功能,和输出功能的配置略有区别。本次通过按键触发相应功能没有…...

Unity3D Shader实现法线贴图功能详解
在Unity3D中,Shader是一种强大的工具,可以帮助开发人员实现各种复杂的视觉效果,其中法线贴图功能就是其中之一。法线贴图是一种纹理映射技术,通过在模型表面上放置法线贴图纹理来模拟真实世界中的细节和凹凸,使模型看起…...