前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go语言学习-初识

go语言学习-初识

作者头像
编程珠玑
发布2019-09-02 22:06:32
3260
发布2019-09-02 22:06:32
举报
文章被收录于专栏:编程珠玑编程珠玑

前言

Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。

特点

相比于其他语言,它有以下特点(内容来源于网络):

  • 可直接编译成机器码,不依赖其他库,便于部署
  • 语言层面支持并发
  • 丰富的标准库
  • 内置runtime,支持垃圾回收
  • 内置强大的工具,gofmt工具统一了编码风格
  • 内嵌C支持,同时有C基础,学Golang也较轻松
  • 原生支持Unicode

Go主要应用

  • 服务器开发
  • 网络应用开发
  • 分布式系统
  • 数据库
  • 云平台

环境安装

以Linux平台为例,从https://golang.org/dl/下载linux版本的安装包,假设你要安装到/usr/local目录下:

代码语言:javascript
复制
$ tar -C /usr/local -xzf go$VERSION.$OS-$ARCH.tar.gz
# go$VERSION.$OS-$ARCH.tar.gz为前面下载好的安装包

为了直接使用go命令,需要将go所在bin路径加入到PATH环境变量中,

代码语言:javascript
复制
export PATH=$PATH:/usr/local/go/bin

注意这种方式只对当前shell有效,想要永久生效,需要修改/etc/profile或者~/.bashrc文件,具体不作介绍。

Hello World

环境准备好之后,我们来编写第一个go程序:

代码语言:javascript
复制
//hellogo.go
package main
import "fmt"
func main() {
    fmt.Println("Hello world")
}

编译并运行:

代码语言:javascript
复制
$ go build hellogo.go
$ ./hellogo.go
Hello world

虽然很简单,但是我们仍然一行一行弄清楚。

  • 第一个声明了当前文件位于main包
  • 第二行导入了fmt包,导入之后就可以使用包中的接口了
  • 第三行定义了main函数,这个与其他编程语言类似,但没有返回类型
  • 第四行使用了fmt包中的Println函数打印了“Hello world”
  • 大括号结束

包类似于其它语言里的库(libraries)或者模块(modules)一个包由位于单个目录下的一个或多个.go源代码文件组成。同时每个源文件都以一条package声明语句开始。但是这里要注意,对于可运行的go程序,main函数必须在main包中。

还需要注意的是:

  • 缺少了必要的包或者导入了不需要的包,程序都无法编译通过
  • import声明必须跟在文件的package声明之后
  • main包特殊,它定义了一个独立可执行的程序
  • 每行程序结束后不需要撰写分号,除非一行上有多条语句
  • 大括号不能够换行放置

进一步的思考

无意中发现,编译出来的bin文件足足有2.2M,即便是使用strip命令处理之后,仍然有1.6M。而C语言版的只有8.5K。

代码语言:javascript
复制
$ ls -lh
total 2.3M
8.5K 1月  20 16:45 helloc
  75 1月  20 16:45 helloc.c
2.2M 1月  20 16:45 hellogo
  70 1月  20 16:35 hellogo.go

即便使用strip处理之后,hellogo仍然有1.6M:

代码语言:javascript
复制
$ strip hellogo
$ ls -lh hellogo
1.6M 1月  20 16:48 hellogo

当然我们使用ldd命令看到:

代码语言:javascript
复制
$ ldd hellogo
    not a dynamic executable
$ ldd helloc
    linux-vdso.so.1 =>  (0x00007ffcffbe2000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff8d5798000)
    /lib64/ld-linux-x86-64.so.2 (0x00007ff8d5b62000)

可以看到,C程序默认使用了动态链接,而go程序并没有默认使用动态链接,而是静态链接。这不禁让我们想到开始所说的go程序便于部署。由于不需要依赖其他动态库,go程序能够很方便的在机器上部署。

关于静态库和动态库的优劣不在本文的讨论范围之内。

总结

如今go语言在很多方面都有应用,甚至被称为“21世纪的c语言”。本人初学go,如有描述不当之处,还请各位多多指教。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程珠玑 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 特点
  • Go主要应用
  • 环境安装
  • Hello World
  • 进一步的思考
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档