41

【Golang之路】Golang初识 开启之路

 4 years ago
source link: https://www.tuicool.com/articles/reU36rj
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

对于该专栏文章,都是自己的学习文章记录,如果有文章的错误理解之处,也欢迎大家直接指出,也很高兴和大家一起学习进步。

Go语言简介

Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。

Go语言(简称Golang)是云计算时代的C语言,Go的诞生能够使得程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行优化,使用Go编译的程序可以和C或C++代码的速度。而且更加安全,支持并行进程。

Go语言就是在C/C++和python之间架起了桥梁,提供了了很快的执行速度,可快速开发,使得变成高性能的语言,也让开发变得更加迅捷。

Go语言优势

  • 可直接编译成机器码,不依赖其它库,glibc的版本有要求,部署简单(直接放一个文件即可)。

    • 静态类型语言,但是有动态语言的感觉。
    • 静态类型的语言:可以在编译的时候检查出隐藏的大多数问题
  • 动态类型的语言:很多包都可以直接使用,使得写代码的效率很高。
  • 语言层面而言,支持开发,也是Go语言的特色,使得Go可以直接充分利用多核,可以很容易地使用并发,这也是很多公司用作Go做后台服务器的原因之一。
  • 内置Runtime,支持垃圾回收,这一特性属于动态语言的特性之一,对于早期版本Go的GC(垃圾回收机制)不完美,但是足以应对多数情况。
  • 简单易学,Go语言的作者有C的基础。所以很多部分继承了C的内容,包括大多数语言中的特性:继承、重载、对象等。
  • 丰富的标准库,Go语言目前内置了大量的库,特别是网络库。
  • 内置强大的工具,Go语言内置了很多工具链,例如gofint工具,自动化格式化代码。
    跨平台编译
  • 内嵌C支持,Go里面也可直接包含C代码,利用现有丰富的C库。

    Go语言的适合用途

  • 服务器编程(处理日志、数据打包、虚拟机处理、文件系统等),相比于在Go之前,都是C或C++在做类似的事情。
  • 分布式系统、数据库代理器等。
  • 网络编程(应用最广的领域):包括了Web应用、API应用、下载应用。
  • 内存数据库:如Google开发的groupcache、couchbase的部分组建。
  • 云平台

    环境搭建

    由于我的是MAC系统,对于Fusion而言,只安装了Ubuntu系统,所以对于windows安装环境下学习小伙伴,可以直接Google Search一下。

MAC OS环境下的安装使用 brew

brew install go

或者

brew install golang

Ubuntu系统环境下直接在命令行:

apt install golang-go

在安装完成之后,可直接使用go  version来查看go是否安装成功和查看它的版本。

对于Go的环境搭建之后,就是对于编译器的选择,个人特别喜欢JetBrains家族中的Goland,具体的安装可以Google Search一下。

标准命令概述

对于标准命令的概述具体可以参考: https://studygolang.com/pkgdoc

第一个Go语言

Go 语言的基础组成有以下几个部分:

  • 包声明
  • 引入包
  • 函数 / 函数体
  • 变量
  • 语句 & 表达式
  • 注释
package main // package main 定义了包名。必须在源文件中非注释的第一行指明这个文件属于哪个包

import (

"fmt" 

) /* import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。 */

func main() { // func main() 是程序开始执行的函数(函数的入口)。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该数)。

   /* 这是hello world的程序 */  //  /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。

   fmt.Println("Hello,Go World!") //  fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。 Print 和 Println 这两个函数也支持使用变量

}

关于包,根据本地测试得出以下几点:

文件名与包名没有直接关系,不一定要将文件名与包名定成同一个。

文件夹名与包名没有直接关系,并非需要一致。

同一个文件夹下的文件只能有一个包名,否则编译报错。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK