入坑Go语言(一)—— 基础语法

golang

原文发布在我的个人博客 入坑Go语言(一) | 以太空间

  最近看到Github上好多following都在学习Go语言(又称Golang),心里面很痒痒,趁着下午这点空隙,学习一下这个可爱的土拨鼠。

一、安装配置相关

  Go语言的安装很是傻瓜式,从它的官网直接下载相应系统的安装包安装即可,就像我们平常安装软件,下一步,下一步……

  安装完成之后,我们要配置以下Go的环境变量,在当前用户家目录下的.bash_profile添加以下几行

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

解释一下GOROOTGOPATH的区别:

  • GOROOT是Go语言安装目录(可选设置,1.8版本之后有默认值)
  • GOPATH是Go语言的工作空间,我们写的项目代码都是要放到这个里面的(可选设置,可以有多个值,1.8版本之后有默认值)

一个需要商榷的地方就是,如果我有很多用Go语言开发的项目,该怎么组织呢?
有两种组织方式:

至于IDE,当然是选万能的VS Code了,装个Go插件,看起来很完美。

二、常用命令

  • go build:编译源码文件、代码包、依赖包
  • go run:编译并运行Go源码文件
  • go get:远程获取代码包

三、语法基础

// 程序所属包
package main

// 导入依赖包
import "fmt"

// NAME 常量定义
const NAME string = "I'm chenwengang"

// 全局变量
var mainName = "main mian"

// MyInt 类型声明
type MyInt int

// MyStruct 结构声明
type MyStruct struct {
}

// 接口声明
type iInter interface {
}

// 函数定义
func learn() {
    fmt.Println("learn")
}

// main函数, 入口函数
func main() {
    fmt.Println("Hello World")
    learn()
}

四、基础数据类型

1. 分类

  Go语言的基础数据类型有以下几种:

  • 整型
  • 浮点型
  • 复数
  • 字符串
  • 布尔值

  关于这些数据类型的详细我不再赘述,参考这个链接

  在上面这个链接中,各位看到光整型就int8int16int32等好多种,这是为了充分利用内存,举个例子,当想存放一个1000以内的数时候,int8是最省内存的,所以就选用int8,如果在10万左右,就用int16

  在Go语言中,字符串的统一编码是UTF-8

2. 类型零值

  类型零值不是空值,是某个变量被声明后的默认值:数值类型的默认值是0(复数是0=0i ),布尔型默认值是false,string默认值是空字符串

3. 类型别名

type [别名] int32

  跟C语言的typedef作用一样,但是原名别名位置是反过来的。

五、变量

1. 声明

  Go语言的变量声明基本和C语言是类似的,不过也有一些不同之处,我们通过代码来看:

// 类型在变量名后面
var x int

// 分组声明
var (
    x int = 2,
    y float32 = 1.0,
    z string = "x"
)

// 声明并赋值
var a int, b float32, c string = 1, 1.0, "x"
var a,b,c int = 1,2,3
a,b := 1,2

全部变量必须使用var关键字,局部变量可以省略但是必须用:=

_这个特殊变量就是个垃圾桶

2. 类型转换

  Go语言必须是显式转换,而且只能发生在两种兼容类型之间。

y := 1.0
var x = int(y)

3. 可见性

  • 大写字符开头的变量是可以从其他包访问到的
  • 小写字符开头的变量只能在本包内使用

六、常量

1. 声明

const identifier [type] = [value]

  常量只支持布尔型、数值型、字符串型

2. iota

  • iota在const出现时(每一次)会被重置为0
  • const每新增一行将会iota+1
  • 只能在const出现的地方使用
const (
    a = iota
    b = iota
    c = iota
)
const d = iota
// 最后a=0,b=1,c=2,d=0
const (
    a = iota
    b = iota
    _
    c = iota
)
// 最后a=0,b=1,c=3

3. 一个有趣的现象

看下面这段代码:

const X = 1
const (
    a = X * 2
    b
    c
)
// 最后a=2,b=2,c=2

  这是因为分组const常量声明如果没有赋值,它会在本组内自动寻找上面最近的表达式作为自己等号右边的表达式,上面的代码就相当于:

const X = 1
const (
    a = X * 2
    b = X * 2
    c = X * 2
)

沿用表达式必须要求结构相同,也就是说c, d只能沿用a, b = X, X *2这样的

七、运算符

  算术运算符、比较运算符、逻辑运算符、按位运算符、赋值运算符与C语言是相同的
但是有一点不同,Go语言中的++--只能放在变量后面,而且只能作为语句,不能作为表达式,看下面这段代码:

// 正确的
a := 1
a++
fmt.Println(a)

// 错误的
a := 1
fmt.Println(a++)

八、流程控制

Go语言流程语句与C语言的区别是,判断条件的地方不用加小括号

1. 条件语句

if x < 1 {
    fmt.Println(x)
} else if x < 5 {
    fmt.Println(x-5)
} else {
    
}

2. 选择语句

switch x {
    case 1:
        ...
    case 2:
        ...
}

case后面跟着的条件必须类型相同

3. 循环语句

// 普通for循环
for a:=2;a<10;a++ {
    ...
}
// 代替while
for a < 10 {
    ...
}
// 无限循环
for {
}

4. breakcontinuegoto

和C语言相同

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

推荐阅读更多精彩内容

  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,206评论 1 44
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,151评论 0 13
  • 官方网站:https://golang.org/标准库文档:https://golang.org/pkg/在线编码...
    技术学习阅读 2,327评论 2 39
  • Go入门 Go介绍 部落图鉴之Go:爹好还这么努力? 环境配置 安装 下载源码编译安装 下载相应平台的安装包安装 ...
    齐天大圣李圣杰阅读 4,624评论 0 26
  • 点点繁星缀夜空, 缕缕忧愁筑好梦。 青山不知我愁浓, 不望故乡何处从。 我寄思念与秋风, 少年等成白发翁。 少时誓...
    吴多多Alan阅读 288评论 3 2