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

【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 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/oneloggo.modindirect注释的为间接依赖
  • 运行:
    在这里插入图片描述

使用 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!
}


http://www.kler.cn/a/373928.html

相关文章:

  • 泷羽sec-安全见闻(9)
  • 计算机的错误计算(一百四十)
  • flask+celery处理异步任务
  • ‌Linux tac命令‌
  • 12. MapReduce全局计数器
  • pgsql表分区和表分片设计
  • vue中el-table显示文本过长提示
  • 函数的调用
  • vue2和vue3的数据双向绑定差异整理
  • PPT制作新选择:本地部署PPTist结合内网穿透实现实时协作和远程使用
  • 【java batik_使用BATIK解析SVG生成PNG图片】
  • 数字普惠金融-工具变量(2024.2更新)
  • ubuntu 给终端设置代理
  • web文件包含include
  • 变压器漏感对整流电路的影响【电力电子技术3章】
  • 【jvm】空间分配担保策略
  • Rust 力扣 - 643. 子数组最大平均数 I
  • kafka中MirrorMaker1和MirrorMaker2的区别
  • 易保全创新“诉前调解+赋强公证”,提供便捷高效的纠纷解决途径
  • 关于springboot跨域与拦截器的问题
  • 在面试了些外包以后,我有了些自己的思考
  • LySocket 远程ShellCode注入工具
  • 20241031使用Rockchip原厂RK3566的Buildroot编译RK3399方案
  • 解决注册Kaggle出现的“Captcha must be filled out”问题
  • 022集——统计多条线的总长度(CAD—C#二次开发入门)
  • 玄机-应急响应- Linux入侵排查