Go入门系列:你好,世界

前言

每一门新语言的学习都是从“hello, world”开始的。

开发环境

安装go环境

按照官网的下载及安装文档就很简单集成go开发环境。
Mac和Windows提供了可视化的图形安装方式,还是非常人性化的。
安装成功后,可通过如下命令进行查看,并判断是否安装成功。

go version

建议配置国内的镜像服务器:

配置国内镜像代理(使用阿里云镜像)
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/
验证
go env|grep GOPROXY

IDE

首先推荐知名JetBrains针对Go语言推出的GoLang,这对Java开发同学或者Android同学非常友好;

当然如果是前端同学想要学习Go语言开发,那么就首推微软开源的跨语言源码编辑器VS Code了,添加对应的Go插件即可。

(Hello,world)你好,世界

可以直接通过IDE,或者创建普通文件的形式就行学习第一个go程序。建议创建一个用于包含所有练习项目的文件件,方便学习管理。

1. 创建一个demo.go文件,内容如下

package main
import "fmt"
func main() {
    fmt.Println("Hello, world")
    fmt.Println("你好, 世界")
}

2. 执行go编译命令

go build demo.go

或者在IDE中可以直接点击图中的绿色按钮进行编译

3. 输出结果如下

Hello, world
你好, 世界

知识点

1. package main

这一行代码定义了 Go 中的一个包 package。包是 Go 语言的基本组成单元,通常使用单个的小写单词命名,一个 Go 程序本质上就是一组包的集合。
main包在Go中是一个特殊的包,整个Go程序中仅允许存在一个名为 main 的包
main包中的主要代码就是这个main()函数,这是go可执行程序的入口函数。

func main() {
    fmt.Println("Hello, world")
    fmt.Println("你好, 世界")
}

如果不是package main包,那么这个main()函数知识一个普通函数,那么再ide上也没有绿色的小按钮了。


2. Gofmt

Go语言内置了一套Go社区约定俗称的代码风格,并随安装包提供了一个名为Gofmt的工具,这个工具可以帮助你将代码自动格式化为约定的风格。

因此,作为Go开发人员,请在提交你的代码前使用Gofmt格式化你的Go源码。

对于使用Mac的小伙伴可以直接使用快捷键【command+option+l】快速格式化程序代码。

3. 标准 Go 代码风格使用 Tab 而不是空格来实现缩进的

4. 导包及函数调用

  • import “fmt” 一行中“fmt”代表的是包的导入路径(Import),它表示的是标准库下的 fmt 目录,整个 import 声明语句的含义是导入标准库 fmt 目录下的包;
  • fmt.Println 函数调用一行中的“fmt”代表的则是包名。
在 Go 语言中,只有首字母为大写的标识符才是导出的(Exported),才能对包外的代码可见;如果首字母是小写的,那么就说明这个标识符仅限于在声明它的包内可见。

5.所见即所得
Go源码文件本身采用的是Unicode字符集,而且用的是UTF-8标准的字符编码方式;因此不会存在像Python那样存在中文的编码问题,需要在在文件开头加入 # -- coding: UTF-8 -- 或者 # coding=utf-8,比如下面这样

#!/usr/bin/python
# -*- coding: UTF-8 -*-

print( "你好,世界" )

6.编码中分号是可选的

编译

使用go build命令编译后生成二进制可执行文件,通过ls命令可以进行查看

go build demo.go

MacBook-Pro-5:awesomeProject demo$ ls
demo    demo.go go.mod

demo文件即为可执行文件(Windows系统下为demo.exe,其余系统下为demo)

Go是一种编译型语言,这意味着只有你编译完Go程序之后,才可以将生成的可执行文件交付于其他人,并运行在没有安装Go的环境中。

当然也可以不经过编译,直接运行查看结果,使用 go run 命令,这通常用在开发调试阶段。

MacBook-Pro-5:awesomeProject demo$ go run demo.go
Hello, world
你好, 世界

go.mod依赖管理

Go module构建模式是在Go1.11版本正式引入的,为的是彻底解决 Go 项目复杂版本依赖的问题,在 Go1.16版本中,Go module 已经成为了 Go 默认的包依赖管理机制和Go源码构建机制。

Go Module的核心是一个名为 go.mod 的文件,在这个文件中存储了这个 module 对第三方依赖的全部信息,相当于flutter中的pubspec.yaml文件, ReactNative项目中的package.json文件。

go.mod文件的内容示例如下,

module hellomodule

go 1.16

require (
    github.com/valyala/fasthttp v1.38.0
    go.uber.org/zap v1.22.0
)

题外话

可以使用go mod tidy添加所有第三方依赖, 与此同时也会生成一个go.sum文件。

go.sum文件,这个文件记录了 hellomodule 的直接依赖和间接依赖包的相关版本的 hash 值,用来校验本地包的真实性。在构建的时候,如果本地依赖包的 hash 值与 go.sum 文件中记录的不一致,就会被拒绝构建。

总结

  1. Go 包是 Go 语言的基本组成单元。一个 Go 程序就是一组包的集合,所有 Go 代码都位于包中;
  2. Go 源码可以导入其他 Go 包,并使用其中的导出语法元素,包括类型、变量、函数、方法等,而且,main 函数是整个 Go 应用的入口函数;
  3. Go 源码需要先编译,再分发和运行。如果是单 Go 源文件的情况,我们可以直接使用 go build 命令 +Go 源文件名的方式编译。不过,对于复杂的 Go 项目,我们需要在 Go Module 的帮助下完成项目的构建。

参考资料
极客时间《Go语言第一课》

本文参与了思否技术征文,欢迎正在阅读的你也加入。

编程开发工作者

225 声望
18 粉丝
0 条评论
推荐阅读
开源:ReactNative设置应用角标库
项目开发需要RN项目可以设置应用角标,搜索相关资料后发现目前没有第三方库直接支持,所以想到自己通过桥接双端原生进行实现,本着不重复造轮子的思想,将库进行开源。

似水流年阅读 596

前端如何入门 Go 语言
类比法是一种学习方法,它是通过将新知识与已知知识进行比较,从而加深对新知识的理解。在学习 Go 语言的过程中,我发现,通过类比已有的前端知识,可以更好地理解 Go 语言的特性。

robin23阅读 3.3k评论 6

封面图
Golang 中 []byte 与 string 转换
string 类型和 []byte 类型是我们编程时最常使用到的数据结构。本文将探讨两者之间的转换方式,通过分析它们之间的内在联系来拨开迷雾。

机器铃砍菜刀24阅读 58.2k评论 2

年度最佳【golang】map详解
这篇文章主要讲 map 的赋值、删除、查询、扩容的具体执行过程,仍然是从底层的角度展开。结合源码,看完本文一定会彻底明白 map 底层原理。

去去100216阅读 11.6k评论 2

年度最佳【golang】GMP调度详解
Golang最大的特色可以说是协程(goroutine)了, 协程让本来很复杂的异步编程变得简单, 让程序员不再需要面对回调地狱, 虽然现在引入了协程的语言越来越多, 但go中的协程仍然是实现的是最彻底的. 这篇文章将通过分析...

去去100215阅读 11.9k评论 4

万字详解,吃透 MongoDB!
MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C++ 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常...

JavaGuide8阅读 1.7k

封面图
数据结构与算法:二分查找
一、常见数据结构简单数据结构(必须理解和掌握)有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小)无序数据结构:集合、字典、散列表,无序数据结构省时间(读取时间快)复杂数据结构树、 堆图二...

白鲸鱼9阅读 5.3k

编程开发工作者

225 声望
18 粉丝
宣传栏