一篇有关Golang的简短文章,面向新开发者或那些不花很多时间研究该语言的人,并且希望对其进行简短,简洁,深思熟虑的原始介绍。 编写的所有代码都在一个repl中。

Go真的很酷,根据Stack Overflows 2017数据集,这是最赚钱的技术。 Go开发人员的平均年薪约为110k : 此链接就在这里!

(侧边栏上的技术->顶部付费技术以进行验证)

该死的!

但这只是学习Go的一部分原因。 主要原因是: 学习它只会加快您对基本计算机科学主题的理解。 为什么? 好吧, Golang是一种经过深思熟虑的现代语言,它利用了之前创建的许多编程语言的最佳实践。

这也是Google制作的一种语言,用于处理几乎每个人都在使用的海量数据和与处理其搜索引擎相关的问题。

另一方面,要全面学习Go,就是要学习如何构建可为低级问题提供答案的软件。 换句话说,它是为其他软件提供服务的软件。 从某种意义上讲,如果您了解Golang,那么您就会知道如何构建与该字段的内容相关的程序。

让我们深入研究一些代码。 故事是这样开始的:

现在是这次,就像在2018年一样。但是突然之间,时间跳了……提前了240年。 仿佛您一直都在被奥斯汀·鲍尔斯冻结。 突然间拯救宇宙取决于你。 在结尾处加捻。

我写了一段大约150行的代码,完整地讲了一个很短的故事(很多印刷品),我将在结尾处写。 我将从头到尾仔细阅读代码。 从简单开始,然后变得有点密集。

package main

import ( "fmt" "time" "strconv" "io" "strings")

包主 ? 所有Go源代码都是软件包的一部分,每个文件都需要一个package语句。 package main是运行代码的文件。 其他软件包文件是导入到软件包main中的模块。 这些模块是可重用的代码段,可在package main使用或实现。

因此,导入的模块包含我将在此文件中使用的源代码。

type Aliens struct {  species int}

type NotEarthling struct {  total int  century string  thingamajig string}

type Earthling struct {  total int  century string  name string  age int64}

type WordSpaceship struct {  health string  weapon string}

type NumberSpaceship struct {  health int  weapon int}

具有不同用法的多个结构。

什么是结构 ? 这是创建对象的方式,每个值可以具有不同的类型。 关键是所写的单词,一个字符串。 虽然,每个键必须具有指定的类型,但它不是动态的。

创建对象的另一种主要方法是使用地图 。 但是,在这种情况下,每个键和值都必须是单一类型:

  • make(map [string] int)所有键必须是字符串,所有值必须是int

因此,在映射中,每个键必须是一种类型,而每个值都必须是一种类型。 在结构中,每个值都可以使用不同的类型。

var you = Earthling{century: "21st", name: "you", age: 24}

func main() {    defer fmt.Println("Is this all a dream?")

    now := time.Now()    nanos := now.UnixNano()    fmt.Printf("Right now it is: %v! \nPop! AHHHHH\n\n", now)

变量声明发生在全局范围内,因此必须使用var关键字进行初始化。 这是初始化结构的一种方法 。 注意,我指定了键并将其值设置为结构定义中编写的相应类型。 请注意,我还没有初始化每个键/值(您不需要)。

推迟 ? 这将创建一个函数调用的后进先出堆栈,以在func main() {...}完成调用。 我说一个称为defer的堆栈可以被多次调用,每次调用它时,被压入堆栈的最后一个函数将被首先调用。

:=,这是什么? 也就是说,编译器将动态确定类型。 与之类似,以这种方式将值初始化为变量时,无需指定类型,这是唯一的方式。

time.Now()返回此值:2017–12–28 01:41:05.240081928 +0000 UTC

now.UnixNano()返回此值:1514425756675856179,这是自8年前创建Golang以来发生的纳秒数。

Printf允许以各种形式注销值:

%v给出默认值

%T给出值的类型

是两种主要形式。

仍在下面的功能主体中。

    nanos = nanos + 7600000000000000000

    years := (nanos - now.UnixNano())/1000000000/31622400

    now = time.Unix(0, nanos)

    fmt.Printf("And now it is: %v!\nOh hell!\n\n", now)

在开始的时候,未来大约240年就是76000000000000000000纳秒。

years是一种计算,请转换为秒,然后转换为年。

time.Unix(seconds,nano seconds)会将纳秒转换为:2258–10–29 00:55:56.675856179 +0000 UTC

    var e []Earthling    var ne []NotEarthling

    for i := 0; i < 70000; i++ {        e = append(e, Earthling{})    }

    for i := 0; i < 44; i++ {        ne = append(ne, NotEarthling{})    }

    aliens := Aliens{2}

    futureEarthling := Earthling{len(e), "22nd", "The Future", 32141}

    futureNotEarthling := NotEarthling{len(ne), "99th", "Grok grok grok"}

var关键字调用设置了一个只能用指定类型填充的零值数组(空数组)。 不能将整数,字符串等添加到此数组。

在以下for循环中 ,我将指定类型的空结构附加到数组。

在这种情况下,只有两种外来物种。 地球 地球

请注意,如何将FutureEarthling设置为结构Earthlings而不指定键,这是一种简写,只要您将值按struct中定义的相应顺序放置,在这种情况下: {int,string,string,int64} ,然后可以用这种方式填写字段。

现在,每个Earthling对象都有一个名为Greet的函数……让我们检查一下单独的函数,而不是main函数。

func (e *Earthling) Greet(y int64) string {

    century, _ := strconv.ParseInt(e.century[0:2], 0, 64)

    if century > 21 && century < 30 {

      age := strconv.FormatInt(you.age, 10)

      str := "Welcome to the future young Padawan, you are in the: " + e.century + " century. And I am: " + e.name + ". You are now... " + age + "years old. The world is under attack, and you have been revived to defend it! Big scary invader has something to say..."

      return str

    } else {      e.age = e.age + y      return "Where am I???"    }}

好的,所以这对应于此人正在经历的生存危机,它已经唤醒了很远的未来,还有一个随机的未来家伙有话要说!

嗯…看顶部: (e * Earthling) 。 这是什么? 好吧, e将成为调用该方法的Earthling对象的实例。 和*这是一个指针 。 我邀请您打开下面的副本,将其删除*,然后看看会发生什么。

这意味着什么: you.Greet(year) 正在创建 you 的副本, 除非您指向它的内存地址 。 如果不这样做,什么你做you将不会改变主函数中的对象。 指针确保可以更改对象。

在此代码段中,我们还有一个新库…… strconv 。 这是您要将int更改为字符串(反之亦然)或许多其他类型时使用的库。 Go有很多数据类型……int,int8,int16,int32,int64。 我命名的全部就是int,换句话说,一个人可以继续……键入galore。

如果仔细观察,我使用指针的全部原因是为了改变年轻的帕达万的年龄。

numberShip := NumberSpaceship{100, 3}wordShip := WordSpaceship{"Read this to defeat me.", "Powerful words!"}

wordAttack := make(chan int)finished := make(chan int)

go func() {    for {        numberShip.health = numberShip.health - <-wordAttack        if numberShip.health <= 0 {            Extinction(&aliens)            finished <- 0        }    }}()

fmt.Println(Fight(&numberShip, &wordShip, wordAttack, finished))

好的,首先,两个结构的第一个参数是它们的健康状况。 因此,对于数字船来说 ,健康是100,对于词船来说 ,健康是一个句子…… "Read this to defeat me" ……? 我将在底部的功能Fight中使用该功能,该功能使用所谓的Reader

make(chan int)创建所谓的通道。 发送/接收值的管道。 发送是这样的: <-wordAttack ,接收是: 完成的<-0

go func(){…}()goroutine的创建 当同时使用通道和goroutine时,要记住的主要一点是, 只要通道向其发送值 ,goroutine就会继续 因此,让我们检查一下从何处获取其值,即Fight函数。

func Fight(ns *NumberSpaceship, ws *WordSpaceship, c, f chan int) string {    x := len(ws.weapon)    r := strings.NewReader(ws.health)    b := make([]byte, ns.weapon)    for {        select {            case c <- x:                fmt.Println("Hit it!")            case <-f:                fmt.Println("He's finished!")                return "\nYou saved time, space, eternity, everything!\n"        }        _, err := r.Read(b)        if err == io.EOF {            return "You failed, the universe is to end."        }    }}

首先,检查功能签名。 通过引用变量的内存地址(带有 )来调用该函数。 在签名中,函数需要一个指针 (即引用的变量)作为NumberSpaceshipWordSpaceship的参数。

另外,请检查两个chan ints类型如何仅写入一次。 如果参数类型彼此相邻且具有相同的确切类型,则可以将它们分组。

首先, 字符串库,“实现简单的功能来处理UTF-8编码的字符串”。 在此功能中,将创建一个读取器来读取字符串。

好的,字符串阅读器的实现:

  • r:= strings.NewReader(ws.health)返回一个新的Reader ,它将从s中读取: "Read this to defeat me"
  • b:= make([] byte,ns.weapon)返回指定长度的字节片。 ws.weapon是值3。
  • _,err:= r.Read(b)更细微。 _也可以是变量名,我们称它为n 。 如果n存在,则意味着Read读取的字节数将返回n 。 但是,如果保留原样,则不必使用返回的值。 否则,您必须这样做,也就是说Go不允许使用不声明的变量。 因此,首先, Read返回读取的字节数,其次,当且仅当读取整个字符串时,它才返回错误,在这种情况下,将返回io.EOF (文件末尾)错误。 否则,其值为: <nil>
  • 因此, r是读者。 b是输入字符串的内容。 读取是调用该函数来实现的功能。

所以,总结了读者 ,为什么它正在使用,一旦串读NumberSpaceship胜和WordSpaceship损失。 战斗非常激烈。

快速说明: 对于{…} ,请执行无限循环,直到函数返回。

至于WordSpaceship的攻击。

  • select正在等待通道cf的多个通信操作。 当准备好发送数据或接收数据时,只要函数不返回,它将继续这样做。
  • 假设<-x ,连续将x的值发送到此通道。 然后,回到func main的goroutine,执行以下操作: numberShip.health = numberShip.health — <-wordAttack破坏船。 因此,该通道将清空它刚收到的x。 通道接收值并将其发送到相应的goroutine之后
  • case <-f仅在f具有与其关联的值时运行,并且仅在if语句之后的mainfinish <-0中发生时才发生。

那是战斗! 战斗结束后,无论谁输了,他们的整个物种都灭绝了……这就是它的编写方式,逻辑并没有像实际那样被合并。

type Aliens struct {    species int}

func Extinction(a *Aliens) {    a.species = a.species - 1}

func main() {    aliens := Aliens{2}    Extinction(&aliens)}

相当多的逻辑。

从真实代码中注销的全部内容!

Right now it is: 2017-12-28 21:40:35.066259304 +0000 UTC! Pop! AHHHHH

And now it is: 2258-10-29 20:47:15.066259304 +0000 UTC!Oh hell!

Where am I??? 

Welcome to the future young Padawan, you are in the: 22nd century. And I am: The Future. You are now... 264 years old. The Universe is under attack, and you have been revived to defend it! Big scary invader has something to say... 

Tord thaz geck hild quemp 240! 

He challenged you! You're the chosen one, so you must save the Universe! Jump on this spaceship.

VRRRROOOOOOOOOOOOMMMMMMMM BOOM BOP BOOM BOP

Hit it!Hit it!Hit it!Hit it!Hit it!Hit it!Hit it!He's finished!

You saved time, space, eternity, everything!

AHHH, the aliens left a bomb, the Universe is to disintegrate into nothingness!

Some higher being sort of thing says: There are  0  sentient beings left alive.

Was that all a dream?

和代表:

repl.it-@jerrymuzsik撰写的GolangArticleFrozenSpaceGuy
强大而简单的在线编译器,IDE,解释器和REPL。 使用JavaScript,Python编写代码,编译和运行代码… repl.it

如果您有兴趣了解更多有关Go,入门文档/练习方面的问题,我强烈建议您这样做!

围棋之旅
tour.golang.org

非常感谢! 你是最好的! 高朗先生也有话要说。

我thanky thee muchee为readee thisee somethingee,cheerees mee哥们

From: https://hackernoon.com/golang-the-highest-paying-technology-to-know-9c6089d7081d

以太空为主题的Golang简介相关推荐

  1. golang简介_Golang简介

    golang简介 This post intends to be an introduction to the Go programming language, also known as Golan ...

  2. 01——golang简介

    Golang是Google的三个人开发的一种静态强类型.编译型语言.Go语言语法与C相近,但功能上有:内存安全,GC(垃圾回收),结构形态及CSP-style并发计算 强类型语言也称为强类型定义语言. ...

  3. Go语言自学系列 | golang简介

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  4. Golang(1)-简介及特性

    文章目录 一.Golang简介 1.1.什么是Golang 1.2.使用Golang完成的著名项目 1.3.Golang的特性 二.Golang的特性概述 2.1.自动垃圾回收 2.2.丰富的内置类型 ...

  5. Golang 学习笔记(安装)

    这份笔记按照的参考资料为<GO并发编程实战> 和 无闻的<跟无闻学Go语言:Go编程基础视频教程> ,按照<GO并发编程实战>的章节顺序缓慢更新..冏 Golang ...

  6. GIS讲堂第二课-地图切片简介以及OL中的调用

    概述: 在大家的支持与帮助下,"GIS讲堂"第二课已落下帷幕,在此对大家的支持与帮助表示衷心的感谢,同时呢,也给大家致歉,由于感冒的缘故,讲课的时候的各种毛病还请大家多多包涵,下面 ...

  7. golang基础之初识

    golang 简介 很久以前,有一个IT公司,这公司有个传统,允许员工拥有20%自由时间来开发实验性项目.在2007的某一天,公司的几个大牛,正在用c++开发一些比较繁琐但是核心的工作,主要包括庞大的 ...

  8. golang 学习笔记

    golang 简介 静态 强类型 编译型语言 GO语言适用场景及GO语言的优势 Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(R ...

  9. liferay 6.2 主题开发

    Developing a Liferay Theme 作为一个开发者,你需要你的站点准确有效的传达你的想法.你不希望你设计的网站限制用户从你的内容总收到影响.这就是主题发挥作用的地方.主题允许你创造性 ...

最新文章

  1. CF982 C Cut 'em all!【树/DFS/思维】
  2. 数据科学项目(二)之明确问题及确立目标
  3. Android之最简单的遍历某个目录下的所有文件(递归)
  4. 收集最全的Joomla教材网站和joomla模板网站
  5. tanh python_带有Python示例的math.tanh()方法
  6. Type-c与micro usb 的对应关系
  7. Vue——商品详情页(未完,写着以免忘掉)
  8. 如何使用easywechat开发微信支付功能
  9. Mybatis狂神说完整笔记
  10. adobe illustrator如何绘制箭头
  11. 记某环境SqlServer异地备份的坑(Server权限管控贼拉严格)
  12. 快速打开电脑计算机的快捷键,电脑自带的计算器如何快速打开和快捷键的添加...
  13. 微信小程序点击地址,跳转到地图导航
  14. 2023年了,还是没学会内卷....
  15. 怎么查看mysql密码_怎么查看mysql密码
  16. JavaScript事件循环
  17. 保姆级-红米AC2100之breed不死后台刷写openwrt官方版第三方改良版
  18. 【Python入门基础】网络编程
  19. CSS的2D与3D变换
  20. 【我的面试-01】Web前端开发实习岗-面试题总结

热门文章

  1. 【Yocto学习入门】02 - 构建一个简单的Poky参考嵌入式操作系统
  2. Linux Deepin蓝牙更新内核后无法使用的问题的各种方法尝试-service\heitool\hciconfig\blueman
  3. PDF文件编辑工具 V9.0.01
  4. Android_2_常用控件及常用属性
  5. b2b2c所有功能整合
  6. alpha冲刺(事后诸葛亮)
  7. 中创|Facebook、腾讯、字节跳动纷纷加码, 元宇宙才是互联网的未来?
  8. 基于Leaflet的leaflet-sidebar侧边栏组件集成
  9. 现代黄河三角洲的冲淤分区及地层特征
  10. HTML Tab选项卡