随笔 - 62  文章 - 0  评论 - 1  阅读 - 19987

Tony Bai · Go语言第一课 _个人笔记 04|初窥门径:一个Go程序的结构是怎样的?

Tony Bai · Go语言第一课 _个人笔记 04|初窥门径:一个Go程序的结构是怎样的?

1、配置国内的Go模块的镜像

配置国内镜像代理(使用阿里云镜像)

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/

验证 go env|grep GOPROXY

个人主机示例:

C:\**\**>go env GOPROXY
https://proxy.golang.org,direct # 查看原型的 代理URL
# 配置国内镜像代理(使用阿里云镜像)
C:\**\**>go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
# 查看验证 win10 应该使用 以下命令
C:\**\**>go env GOPROXY
https://mirrors.aliyun.com/goproxy/

C:\Users\z>

2、Go语言程序结构

package main // 文件所在包的包名(不局限于所在文件夹,与编译结果有关——也就是说,不管在哪一个文件夹下也可以 任意定义包名——不同于java的包路径限定)

import "fmt" // 这里 fmt 是 一个路径

func main() { // main 函数 无参数 无返回值
    fmt.Println("hello, world") // fmt.Println 这里的 fmt 是 包名
}

// 整个 代码中没有 一个 分号做结尾 原因是 大多数分号都是可选的,常常被省略,不过在源码编译时,Go 编译器会自动插入这些被省略的分号。

3、gofmt

标准 Go 代码风格使用 Tab 而不是空格来实现缩进的,当然这个代码风格的格式化工作也可以交由 gofmt 完成。

Go 语言内置了一套 Go 社区约定俗称的代码风格,并随安装包提供了一个名为 Gofmt 的工具,这个工具可以帮助你将代码自动格式化为约定的风格。Gofmt 是 Go 语言在解决规模化(scale)问题上的一个最佳实践,并成为了 Go 语言吸引其他语言开发者的一大卖点。很多其他主流语言也在效仿 Go 语言推出自己的 format 工具,比如:Java formatter、Clang formatter、Dartfmt 等。

4、Go module

Go module 构建模式是在 Go 1.11 版本正式引入的,为的是彻底解决 Go 项目复杂版本依赖的问题,在 Go 1.16 版本中,Go module 已经成为了 Go 默认的包依赖管理机制和 Go 源码构建机制。Go Module 的核心是一个名为 go.mod 的文件。

用法:

C:/**/*>go mod init XXXXX 
# 初始化 "XXXX" 声明 module 路径(module path) 

专栏示例:

$go mod init github.com/bigwhite/hellomodule
go: creating new go.mod: module github.com/bigwhite/hellomodule
go: to add module requirements and sums:
  go mod tidy
  
$cat go.mod
module github.com/bigwhite/hellomodule

go 1.16

相关说明: module 就是一个包的集合,这些包和 module 一起打版本、发布和分发。go.mod 所在的目录被我们称为它声明的 module 的根目录。不过呢,这个时候的 go.mod 文件内容还比较简单,第一行内容是用于声明 module 路径(module path)的。而且,module 隐含了一个命名空间的概念,module 下每个包的导入路径都是由 module path 和包所在子目录的名字结合在一起构成

go mod tidy 命令,让 Go 工具自动添加 所依赖的第三方包

$go mod tidy       
go: downloading go.uber.org/zap v1.18.1
go: downloading github.com/valyala/fasthttp v1.28.0
go: downloading github.com/andybalholm/brotli v1.0.2
... ...

执行 之后的 文件内容变化

module github.com/bigwhite/hellomodule

go 1.16

require (
   github.com/valyala/fasthttp v1.31.0
   go.uber.org/zap v1.19.1
)

注: 这是个人笔记 所以只记录了对本人有用或者本人觉得有意思的知识点,如果需要详细了解 可以购买相关专栏(绝对没有打广告的意思)该专栏刚刚上线,还未更新结束,本人只是想体验一下跟着专栏作者的更新进度来学习以及留言互动的这一个过程【手动狗头】

posted on   OwlInTheOaktree  阅读(427)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示