【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 string Age int }
hello.go
package main
import "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/mymodule
go 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 mysubmodule
import "fmt"
// HelloWorld 打印问候语
func HelloWorld(name string) {
fmt.Printf("Hello, %s!\n", name)
}
- go.mod文件
module mymodule
go 1.23.2
- main.go文件
package main
import (
mysubmodule "mymodule/mysubmodule" // 导入自定义模块
)
func main() {
mysubmodule.HelloWorld("Alice") // 调用模块中的函数
}
- 项目结构和运行结果:
go接口(interface)
package main
import (
"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!
}