Go语言学习笔记——Windows环境下配置及入门

。_饼干妹妹 提交于 2020-01-25 09:26:53

Go是一种新的语言,一种并发的、带垃圾回收的、快速编译的语言。它具有以下特点:

  • 它可以在一台计算机上用几秒钟的时间编译一个大型的Go程序。
  • Go为软件构造提供了一种模型,它使依赖分析更加容易,且避免了大部分C风格include文件与库的开头。
  • Go是静态类型的语言,它的类型系统没有层级。因此用户不需要在定义类型之间的关系上花费时间,这样感觉起来比典型的面向对象语言更轻量级。
  • Go完全是垃圾回收型的语言,并为并发执行与通信提供了基本的支持。
  • 按照其设计,Go打算为多核机器上系统软件的构造提供一种方法。

Go是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。

Go环境配置

本人是Windows64位操作系统,所以默认安装环境为Windows x64。

安装

进入golang官网下载页https://golang.org/dl/

在这里插入图片描述

下载完毕后安装默认安装路径进行安装,安装完毕后打开cmd,输入go检验是否安装成功。

在这里插入图片描述

工作空间

go 命令依赖一个重要的环境变量%GOPATH%(windows系统中的环境变量格式)。

在这里插入图片描述

可以看到,在该目录下,有三个子目录bin、pkg、src

在这里插入图片描述

  • src 存放源代码(比如:.go .c .h .s等)
  • pkg 编译后生成的文件(比如:.a)
  • bin 编译后生成的可执行文件

简单的Go程序

go程序所有的源码都放在src文件目录下,一般情况下,一个项目一个目录。也就是说,我们假设要新建一个mysum的项目,那么就在src文件夹下新建一个mysum文件夹。

src\mysum目录下新建一个sum.go文件用来计算a+b的值。该文件属于应用包,所以package的名称一般建议和目录名称保持一致,如下

package mysum

func Sum(a float64, b float64) float64{
	return a+b
}

在任意路径下打开cmd输入go install mysum进行编译安装。

在这里插入图片描述

编译安装完毕后,会在pck\windows_amd64目录下出现编译好的.a文件,即编译好的应用包。

在这里插入图片描述

如果我们想要调用这个应用包,就需要建立一个应用程序来进行调用。在src目录下新建一个文件夹sumapp,在该文件夹目录下建立一个main.go文件,package的名称为main

package main

import (
	"mysum"
	"fmt"
)

func main() {
	fmt.Printf("%v\n", mysum.Sum(1,2))
}

src\sumapp目录下执行go build命令进行编译。

在这里插入图片描述

然后,该目录下会生成相应的exe文件。

在这里插入图片描述

执行该exe文件:sumapp,最终得到输出结果。

在这里插入图片描述

小结

package <pkgName>告诉我们当前文件属于哪个包,而包名main则告诉我们它是一个可独立运行的包,它在编译后会产生可执行文件。除了main包之外,其它的包最后都会生成*.a文件(也就是包文件)并放置在$GOPATH/pkg/$GOOS_$GOARCH中。

Go语法

变量

Go语言里面定义变量有多种方式。

使用var关键字是Go最基本的定义变量方式,Go把变量类型放在变量名后面:

//定义一个名称为“variableName”,类型为"type"的变量
var variableName type

上述的表示确实有些繁琐,可以用:=进行简化。:=这个符号直接取代了vartype,这种形式叫做简短声明。但是这种简短声明只能用在函数内部,所以一般用var方式定义全局变量。

vname := v1

_(下划线)是个特殊的变量名,任何赋予它的值都会被丢弃。在下面例子中,我们将值35赋予b,并同时丢弃34

_, b := 34, 35

Go对于已声明但未使用的变量会在编译阶段报错。

常量

常量,也就是在程序编译阶段就确定下来的值,而程序在运行时无法改变该值。在Go程序中,常量可定义为数值、布尔值或字符串等类型。

它的语法如下:

const constantName = value
//如果需要,也可以明确指定常量的类型:
const Pi float32 = 3.1415926

字符串

Go的字符串是用一对双引号("")或反引号( `)括起来定义,它的类型是string

var s string = "hello"

在Go中字符串是不可变的,所以不能通过s[0] = 'c'的操作改变字符串。但是我们可以把string类型转换为[]byte类型,然后再把[]byte类型转换为string类型进行字符串的更改。

c := []byte(s)  // 将字符串 s 转换为 []byte 类型
c[0] = 'c'
s2 := string(c)  // 再转换回 string 类型

字符串虽然不可以更改,但是可以进行切片操作:

s = "c" + s[1:] // 字符串虽不能更改,但可进行切片操作

可以通过`来声明多行字符串:

m := `hello
	world`

一些规则

  • 大写字母开头的变量是可导出的,也就是其它包可以读取的,是公有变量;小写字母开头的就是不可导出的,是私有变量。
  • 大写字母开头的函数也是一样,相当于class中的带public关键词的公有函数;小写字母开头的就是有private关键词的私有函数。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!