这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Intro
本文主要介绍windows环境下go语言环境配置,主要来源于个人使用经验。由于本人也是初次接触go语言,故从一个初学者的角度简单谈一下对于go语言的理解。
Windows下Go语言的安装
Go语言的安装可以通过官网下载安装包,配置环境变量的常见流程完成,在命令行输入go后能够执行go语言编译器即为安装成功。此过程可参考其他教程,本文主要介绍使用包管理器的方法。
使用winget
winget是微软推出的命令行包管理器,内置于新版本的Windows中(使用 winget 工具安装和管理应用程序 | Microsoft Learn)虽然由于软件生态的原因很难达到linux上包管理器的全部功能,并且winget也更像是一个控制面板程序管理功能的命令行版,但已经能提供一个比较方便的开发体验。
通过winget search go可查找go语言的安装包:
使用winget install GoLang.Go.1.19即可安装1.19版本的go语言,winget会自动添加系统环境变量。
其他使用方法可参考winget --help:
Go的其他配置
go的默认代理可能遇到网络问题,通过更改go环境变量中的代理设置可以解决。
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
Vscode中的go语言开发
在插件市场中搜索go,即可安装go语言的语言服务器:
之后vscode会提示安装一些依赖,可能需要国际联网进行下载。
这时即可编写一个简单的hello world程序,在命令行输入go run [file name].go运行程序。
浅谈go语言
本部分仅作为初学者对go语言的直接理解,将介绍一些个人认为具有特色的语言特性。
变量
go语言虽然作为一个强类型语言,但自动类型推断、后置类型名等特性极大减轻了类型带来的心智压力。 以下均为go语言中声明变量并初始化的方式。
var a int
b := 1
var c string = "hello world"
d := []int{1,2,3}
go语言通过引用计数实现了垃圾回收,既拥有了编译型语言的性能,又不需要开发者手动管理内存。
package main
import (
"fmt"
)
func retP() *int {
var a int = 1
return &a
}
func main() {
a := retP()
fmt.Println(*a)
}
结构体
go语言并没有采用复杂的继承机制,结构体仍然保持了简单的功能,但go语言通过独特的方式实现了面向对象的代码复用和数据方法管理。
type User struct {
Name string
Age int
}
func (u *User) String() string {
return fmt.Sprintf("Name: %s, Age: %d", u.Name, u.Age)
}
func main() {
u := &User{"John", 21}
fmt.Println(u)
}
go语言的结构体方法即可将方法和数据关联到一起,形成了常见的“对象”概念。 通过结构体的包含,以组合的方式实现了代码复用,避免了继承带来的结构混乱问题。
接口
虽然没有继承机制,但go通过接口实现了多态的功能。通过定义接口,为结构体实现该接口,即可通过统一的接口名调用不同结构体里对应的方法。
package main
import (
"fmt"
)
type Driver interface {
call()
}
type SqlDriver struct {
}
func (sqlD SqlDriver) call() {
fmt.Println("sql execute")
}
type DiskDriver struct {
}
func (diskD DiskDriver) call() {
fmt.Println("disk execute")
}
func main() {
var driver Driver
driver = new(DiskDriver)
driver.call()
driver = new(SqlDriver)
driver.call()
}
总结
本文介绍了windows环境中安装go语言环境的简易方法,并从初学者的角度简要介绍了go语言的一些特点,旨在为其他同样初学的同学作为交流和参考。相比于java或是cpp,go语言抛弃了许多复杂的概念,并提供了简易、全面的语法和标准库,开发者也无需为内存管理或是版本控制等问题耗费心智,可以说是一个现代化的开发体验。