当前位置: 首页 > news >正文

【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插件安装

在这里插入图片描述

  • 项目调试
    在这里插入图片描述

基础语法

  1. 包(Package)
    每个Go程序都必须属于某个包,通常是main包。

    package main
    
  2. 导入包(Import)
    使用import语句导入其他包。

    import "fmt"
    
  3. 函数(Function)
    使用func关键字定义函数。

    func main() {fmt.Println("Hello, World!")
    }
    
  4. 变量(Variable)
    使用var关键字声明变量,也可以使用短变量声明。

    var x int = 10
    y := 20
    
    • := 是短变量声明(short variable declaration)的语法,用于在函数内部声明和初始化变量。它可以用于定义新的变量,而不需要使用 var 关键字。使用 := 声明的变量会根据右侧的表达式自动推断类型
  5. 控制结构(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)
    }
    
  6. 数组和切片(Arrays and Slices)

    arr := [5]int{1, 2, 3, 4, 5}
    slice := []int{1, 2, 3, 4, 5}
    
  7. 结构体(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/oneloggo.modindirect注释的为间接依赖
  • 运行:
    在这里插入图片描述

使用 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&#xff1a;Shell是一个命令解释器&#xff0c;用来执行用户输入的命令。常用的Shell包括Bash、Zsh、Ksh等。Linux默认的Shell通常是Bash。 Shell脚本&#xff1a;Shell脚本是由一系列命令组成的文件&#xff0c;脚本可以运行一连串命令&#xff…...

官方工具重装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.网络初识 网络和计算机类似&#xff1a;都是属于军用》民用&#xff1b; 网络诞生于美苏争霸时期&#xff0c;当时就感觉核战争一触即发&#xff0c;形式非常严峻…...

每天10个vue面试题(六)

1、对Vue设计原则的理解&#xff1f; 渐进式JavaScript框架&#xff1a;与其它大型框架不同的是&#xff0c;Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化…...

Qt:信号和槽

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

可以免费商用的字体下载

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

centos7之LVS-TUNNEL模式

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

Linux驱动开发(3):字符设备驱动

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

刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:

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

Vue Scoped CSS深度解析:原理、误区与最佳实践

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

744. 寻找比目标字母大的最小字母

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

浅谈QT中Tab键的切换逻辑

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

基于MoviNet检测视频中危险暴力行为

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

《等保测评:抵御网络威胁的盾牌》

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

前端必知必会-JavaScript 对象属性

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

双11都有什么值得入手的好物?双十一最建议买的5样东西

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

Xcode 15.4 运行flutter项目,看不到报错信息详情?

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

AMD开始为基于RDNA的GPU开发自己的神经超采样和去噪技术

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

Python中的文件I/O操作

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

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学

一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件&#xff0c;其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时&#xff0c;价带电子受激发跃迁至导带&#xff0c;形成电子-空穴对&#xff0c;导致材料电导率显著提升。…...

前端工具库lodash与lodash-es区别详解

lodash 和 lodash-es 是同一工具库的两个不同版本&#xff0c;核心功能完全一致&#xff0c;主要区别在于模块化格式和优化方式&#xff0c;适合不同的开发环境。以下是详细对比&#xff1a; 1. 模块化格式 lodash 使用 CommonJS 模块格式&#xff08;require/module.exports&a…...