当前位置: 首页 > 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!
}
http://www.lryc.cn/news/473823.html

相关文章:

  • 从0开始学习shell脚本
  • 官方工具重装Windows 11当前版本 /绕过硬件检查/免U盘
  • JavaEE初阶---网络原理/UDP服务器客户端程序
  • 每天10个vue面试题(六)
  • Qt:信号和槽
  • 可以免费商用的字体下载
  • centos7之LVS-TUNNEL模式
  • Linux驱动开发(3):字符设备驱动
  • 刘艳兵-DBA023-控制文件是Oracle 数据库用来查找数据库文件,控制文件包含以下哪些信息:
  • Vue Scoped CSS深度解析:原理、误区与最佳实践
  • 744. 寻找比目标字母大的最小字母
  • 浅谈QT中Tab键的切换逻辑
  • 基于MoviNet检测视频中危险暴力行为
  • 《等保测评:抵御网络威胁的盾牌》
  • 前端必知必会-JavaScript 对象属性
  • 双11都有什么值得入手的好物?双十一最建议买的5样东西
  • Xcode 15.4 运行flutter项目,看不到报错信息详情?
  • AMD开始为基于RDNA的GPU开发自己的神经超采样和去噪技术
  • Python中的文件I/O操作
  • .net framework 3.5sp1开启错误进度条不动如何解决
  • 什么影响网站的SEO排名
  • css绘制s型(grid)
  • 【华为HCIP实战课程二十八】中间到中间系统协议IS-IS邻居关系排错,网络工程师
  • Word首行空格不显示空格符号问题
  • vue+element上传图片
  • 用ChatGPT提升工作效率:从理论到实际应用
  • 8、Node.js Express框架
  • STM32F103C8T6学习笔记3--按键控制LED灯
  • Unity3D Shader实现法线贴图功能详解
  • 【含开题报告+文档+源码】基于SpringBoot+Vue的校园设备报修系统