数据结构和算法在计算机科学里,有非常重要的地位。此系列文章尝试使用 Golang 编程语言来实现各种数据结构和算法,并且适当进行算法分析。

我们会先简单学习一下Golang,然后进入计算机程序世界的第一个大门。

简单入门Golang

我们只学Golang语言的一个子集,足以开展接下来数据结构和算法的实现即可。

一、前言

Golang语言是谷歌Google公司在2007年启动,并在2009年正式发布并开源的高级编程语言。开源地址:https://github.com/golang/go,官网地址:https://golang.org

Golang语言语法简单,支持多平台交叉编译(Linux/Mac/Windows),支持内存自动GC(垃圾回收),支持嵌C/C++开发,并且实现了语法层面的线程调度,开发多线程程序十分方便。语法很像C/Python/JavaScript等高级编程语言。

设计这门语言的设计者有以下几位:

  1. Ken Thompson:在贝尔实验室与Dennis M. Ritche发明了C语言和Unix操作系统,与Rob Pike发明了UTF-8编码,图灵奖得主。
  2. Rob Pike:也参与开发了Unix操作系统,UTF-8编码发明者之一。
  3. Robert Griesemer:参与过V8 JavaScript引擎和Java HotSpot虚拟机的研发。

前两位比较知名,现在都已经退休了,其他人有兴趣可以谷歌一下。

二、安装并简单使用

安装Golang:https://golang.org/dl:Windows 操作系统点击msi按提示安装,Mac 操作系统可以使用brew install golang安装。

打开命令行终端输入:

go version

显示以下结果即为成功:

go version go1.13 darwin/amd64

在任一文件夹下新建一个文件main.goGolang语言编写的程序文件后缀必须都为.go):

package main

import (
"fmt"
"time"
) func init() {
fmt.Println("init will be before hello world")
} func main() {
fmt.Println("hello world")
fmt.Println("today times:" + time.Now().String())
}

打开命令行终端进行编译:

go build main.go

编译后会在本地文件夹下生成一个二进制文件:main或者main.exe(Windows系统)。

执行二进制:

./main

将会打印出以下结果:

init will be before hello world
hello world
today times:2019-12-09 13:14:14.383118 +0800 CST m=+0.000199077

三、如何学习一门语言

每学一门编程语言,都离不开学习它的语言特征:

  1. 支持哪些基本数据类型,如整数,浮点数,布尔值,字符串,支持哪些高级数据类型,如数组,结构体等。
  2. if判断和while循环语句是怎样的,是否有switch或者goto等语句。
  3. 语言函数的定义是怎样的,如何传递函数参数,有没有面向对象的语言特征等。
  4. package包管理是怎样的,如何管理一个工程,官方提供哪些标准库,如时间处理,字符串处理,HTTP 库,加密库等。
  5. 有没有特殊的语言特征,其他语言没有的,比如某些语法糖。

系列文章入口

我是陈星星,欢迎阅读我亲自写的 数据结构和算法(Golang实现),文章首发于 阅读更友好的GitBook

数据结构和算法(Golang实现)(1)简单入门Golang-前言的更多相关文章

  1. 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数

    包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...

  2. 数据结构和算法(Golang实现)(3)简单入门Golang-流程控制语句

    流程控制语句 计算机编程语言中,流程控制语句很重要,可以让机器知道什么时候做什么事,做几次.主要有条件和循环语句. Golang只有一种循环:for,只有一种判断:if,还有一种特殊的switch条件 ...

  3. 数据结构和算法(Golang实现)(4)简单入门Golang-结构体和方法

    结构体和方法 一.值,指针和引用 我们现在有一段程序: package main import "fmt" func main() { // a,b 是一个值 a := 5 b : ...

  4. 数据结构和算法(Golang实现)(5)简单入门Golang-接口

    接口 在Golang世界中,有一种叫interface的东西,很是神奇. 一.数据类型 interface{} 如果你事前并不知道变量是哪种数据类型,不知道它是整数还是字符串,但是你还是想要使用它. ...

  5. 数据结构和算法(Golang实现)(6)简单入门Golang-并发、协程和信道

    并发.协程和信道 Golang语言提供了go关键字,以及名为chan的数据类型,以及一些标准库的并发锁等,我们将会简单介绍一下并发的一些概念,然后学习这些Golang特征知识. 一.并发介绍 我们写程 ...

  6. 数据结构和算法(Golang实现)(7)简单入门Golang-标准库

    使用标准库 一.避免重复造轮子 官方提供了很多库给我们用,是封装好的轮子,比如包fmt,我们多次使用它来打印数据. 我们可以查看到其里面的实现: package fmt func Println(a ...

  7. CQRS简单入门(Golang)

    一.简单入门之入门 CQRS/ES和领域驱动设计更搭,故整体分层沿用经典的DDD四层.其实要实现的功能概要很简单,如下图. 基础框架选择了https://github.com/looplab/even ...

  8. Java数据结构和算法之数组与简单排序

    一.数组于简单排序 数组 数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信 ...

  9. 《Java数据结构与算法》笔记-CH3简单排序

    class ArrayBub { private long[] arr; private int nElement; public ArrayBub(int size) { arr = new lon ...

随机推荐

  1. CSS每日学习笔记(0)

    7.29.2019 1. CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解 ...

  2. JAVA用geotools读取shape格式文件

    Shapefile属于一种矢量图形格式,它能够保存几何图形的位置及相关属性.但这种格式没法存储地理数据的拓扑信息. 其中,要组成一个Shapefile,有三个文件是必不可少的,它们分别是". ...

  3. 大数据安装之Kafka(用于实时处理的消息队列)

    一.安装部署kafka 1.集群规划 hadoop102                                 hadoop103                          hado ...

  4. css网页重置样式表(多版本)

    Eric reset.css html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, ...

  5. 机器学习中的 7 大损失函数实战总结(附Python演练)

    介绍 想象一下-你已经在给定的数据集上训练了机器学习模型,并准备好将它交付给客户.但是,你如何确定该模型能够提供最佳结果?是否有指标或技术可以帮助你快速评估数据集上的模型? 当然是有的,简而言之,机器 ...

  6. LoardPe与Import REC X64dbg脚本 脱壳 Upx

    目录 LoardPe与Import REC X64dbg脚本 脱壳 Upx 一丶X64dbg调试器与脚本 1.1 起因 1.2 脚本的调试 1.3 Upx脱壳脚本 二丶LoardPe 内存Dump与I ...

  7. JVM 常见参数配置

    -XX:+PrintGC  每次触发GC的时候打印相关日志 -XX:+PrintGCDetails 每次触发GC的时候更详细的相关日志 -XX:+UseSerialGC 串行回收 -Xms 堆初始值( ...

  8. 线程 -- ThreadLocal

    1,ThreadLocal 不是“本地线程”的意思,而是Thread 的局部变量.每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本 2, ...

  9. iOS 缩小 ipa 大小

    一.爱奇艺 爱奇艺移动应用优化之路:如何让崩溃率小于千分之二 iOS8 对于 App 的 text 段有 60MB 的限制: 超过 200MB 的 App 需要连接 WIFI 下载(之前是 150MB ...

  10. [bzoj1191]超级英雄hero<二分图匹配*匈牙利算法>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 今天随便在bzoj找了一题做,题一读完就发现是个匈牙利算法的裸题,原本以为可以一次过 ...