2018年Go语言实战笔记1

含着金钥匙出生的go

近几年,各编程语言中,最火的莫过于Go了。

Go诞生于Google, 是由以下三位计算机领域的大师写的

Go的亲爹们

由于出身名门,Go在诞生之初就吸引了大批开发者的关注。诞生十年以来,已经有很多基于Go的应用,一直有传言Go在将来是要取代现在Java的位置。对于一门只有十年历史的新语言,Go的发展势头是相当迅猛的。

国外的docker就是用Go写的,国内的七牛团队广泛使用Go。而今如火如荼的区块链技术更是将Go推上了热潮

听起来这么牛逼的技术,少年,你不想学下么?

go环境搭建

官网下载go的安装包

如果是mac,可直接用brew安装:

brew intall go

查看go版本

☁  go [master] ⚡ go version
go version go1.10.2 darwin/amd64

关于编辑器,推荐使用jetbrains出品的golang

第一个go程序

按照官网的demo,运行第一个go程序

新建hello.go文件

package main

import "fmt"

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

运行go可以有两种方式:

  1. 类似于python,php这样的脚本语言,直接运行,一步到位
☁  demo [master] ⚡ go run hello.go                                                    
Hello, 世界
  1. 如java,c++ 一样,要进行编译,再运行编译输出的可执行文件
☁  demo [master] ⚡ go build hello.go # 生成可执行文件 hello
☁  demo [master] ⚡ ls
hello    hello.go
☁  demo [master] ⚡ ./hello # 运行可执行文件   
Hello, 世界
代码解析

go是一门有着语法洁癖的语言,如强制规定了大括号的写法。长期以来,关于大括号是否要另起一行,是程序员界的圣战,且这个圣战跨越了语言,操作系统,编辑器。战斗双方多年来厮杀无数回合,不分胜负。python之父Guido van Rossum直接取消了大括号,完全采用缩进,绕过了圣战。与之相比,go就显得很霸道了,直接下了死命令:

"大括号只能在当前行开始,不能另起一行,另起一行是异教徒,直接编译出错!"

让我们来试下:

大括号报错

对于另起一行的强迫症程序员,想用go,惟有屈服。

此外,如果程序中有冗余变量,或引入了没有用到的包,都会报错

package main

import "fmt" // 引入了fmt包,但没有使用

func main() {
}

报错:

☁  demo [master] ⚡ go build hello.go
# command-line-arguments
./hello.go:3:8: imported and not used: "fmt"
变量声明后不用

对于从其他语言转过来的程序员,一开始会不习惯go的霸道规定,尤其是我大PHP程序员。PHP的规范是出了名的松散,随便写都行,程序员在写代码时是挺爽的,怎么开心怎么来,但是要维护别人的代码就感到很恶心了。

go的设计理念既简洁又严谨,用强制性的规则保证了代码的一致性。

变量

go在定义变量的规范上,有些反人类。c++, java 都是在变量名之前声明数据类型,而go却别出心裁的将数据类型声明置于变量名后面。

命名规则

变量的命名规则:以字母或下划线开头,对大小写敏感。不能使用go的保留关键字

go保留关键字

作用域

  1. 在代码块声明的变量,只在块内有效
变量作用域
  1. 在函数内部声明的变量,只在函数内有效
函数内部变量
  1. 在函数外部声明的变量,在整个包内都有效。如果变量名称是大写的,即在整个程序中都有效
包内全局变量

如果变量名要共享到其他包,就需要将包名改成大写

创建以下目录结构:

☁  demo [master] ⚡ tree -L 2
.
├── main
│   └── main.go
└── test
    └── test.go

main.go

package main

import (
    "fmt"
    "../test" // 引入test包
)

func main() {
    fmt.Println(test.NAME) // 获取test包的NAME变量
}

test.go

package test

var NAME = "章鱼喵" // 变量名大写,才能被其他包引用,类似于java中的public关键字

结果:

☁  demo [master] ⚡ go run main/main.go
章鱼喵

你可以试下将test中的NAME改为name,go会报错,小写的变量是模块的私有变量,其他模块无法引用

常量

常量使用const关键字表示,常量一旦定义了,就不可再更改。因此常量只适用于布尔型、数字型(整数型、浮点型和复数)和字符串型。

package main

import "fmt"

const name = "章鱼喵"
const say = "喜欢我的文章,点个赞吧,或者赏杯咖啡钱"
const year = 2018

func main() {
    fmt.Println(name)
    fmt.Println(say)
    fmt.Println(year)
}

这种写法显得很啰嗦,可以用更简洁的方式:

package main

import "fmt"

const (
    name = "章鱼喵"
    say = "喜欢我的文章,点个赞吧,或者赏杯咖啡钱"
    year = 2018
)

func main() {
    fmt.Println(name)
    fmt.Println(say)
    fmt.Println(year)
}
☁  demo [master] ⚡ go run main/main.go
章鱼喵
喜欢我的文章,点个赞吧,或者赏杯咖啡钱
2018

数据类型

go的数据类型从大类划分为:布尔型,数字类型,字符串类型,派生类型

各个类型的具体说明,请自行查阅Go 语言数据类型

go是强类型语言,每个变量都要指定类型,如果不指定,go在编译时会自动根据变量的值推导变量的数据类型。

变量的类型不能更改,广大PHP开发者要谨记了,PHP是弱类型语言,同一个变量,可以随时切换存储的数据类型。PHP的变量不好比是一个万能的筐,什么都可以装。而go的变量是专器专用

package main

import "fmt"

func main() {
    var name string = "章鱼喵" // 指定了数据类型为string
    var say = "智慧如你,有什么要说的,要评论区发表吧..." // 可省略数据类型
    //say = 2018 // 编译报错:不能篡改类型
    fmt.Println(name)
    fmt.Println(say)
}
☁  demo [master] ⚡ go run main/main.go
章鱼喵
智慧如你,有什么要说的,要评论区发表吧...

值类型与引用类型

  1. 值类型:变量存储的是数据本身,如基本数据类型:字符串,布尔型,数字等

  2. 引用类型:变量存储的是数据所在的内存地址,如:指针,map, chan等

package main

import "fmt"

func main() {
    var content = "跟章鱼喵一起学go吧..." // 值类型
    var pipe = make(chan int, 1) // 引用类型
    fmt.Println(content) // 存储具体数据
    fmt.Println(pipe) // 存储内存地址
}
☁  demo [master] ⚡ go run main/main.go
跟章鱼喵一起学go吧...
0xc42005a070

小结

笔记总结

如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,640评论 2 9
  • 今天注册了Amazon AWS账户,还被扣了1美元,觉得有必要了解一下它提供的各种服务。在IBM develope...
    JasonQiao阅读 639评论 1 1
  • 2018.3.16 星期五 晴 -1℃~6℃ 亲子日记61天 中午放学后,轩轩要买糖葫芦就给他买了一个。...
    吉祥三宝159阅读 116评论 2 1