Windows上的Go环境配置和初探 | 青训营笔记

571 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

Intro

本文主要介绍windows环境下go语言环境配置,主要来源于个人使用经验。由于本人也是初次接触go语言,故从一个初学者的角度简单谈一下对于go语言的理解。

Windows下Go语言的安装

Go语言的安装可以通过官网下载安装包,配置环境变量的常见流程完成,在命令行输入go后能够执行go语言编译器即为安装成功。此过程可参考其他教程,本文主要介绍使用包管理器的方法。

使用winget

winget是微软推出的命令行包管理器,内置于新版本的Windows中(使用 winget 工具安装和管理应用程序 | Microsoft Learn)虽然由于软件生态的原因很难达到linux上包管理器的全部功能,并且winget也更像是一个控制面板程序管理功能的命令行版,但已经能提供一个比较方便的开发体验。

通过winget search go可查找go语言的安装包:

image.png

使用winget install GoLang.Go.1.19即可安装1.19版本的go语言,winget会自动添加系统环境变量。 其他使用方法可参考winget --help

image.png

Go的其他配置

go的默认代理可能遇到网络问题,通过更改go环境变量中的代理设置可以解决。

go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct

Vscode中的go语言开发

在插件市场中搜索go,即可安装go语言的语言服务器:

capture_20230115143533859.bmp

之后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语言抛弃了许多复杂的概念,并提供了简易、全面的语法和标准库,开发者也无需为内存管理或是版本控制等问题耗费心智,可以说是一个现代化的开发体验。