Go语言基础之开发环境、数据类型、运算符

开发环境搭建

go官网 https://golang.org/
下载 https://golang.org/dl/
下载 go1.11.2.windows-amd64.msi安装包,双击安装即可。

IDE工具

IntelliJ IDEA 安装go插件
File-Setting-Pluigns,检索go,点击install即可安装,安装成功后重启即可完成

go pluign

新建Go项目
File-New-Project,选择Go,填写项目信息


新建Go项目

填写项目名称,选择项目保存目录,点击Finish即可

项目信息

新建Go File,选择File-New-Go File


Go File

完成简单的Hello world输出

/**包声明*/
package main

//引入包
import "fmt"

/**main函数定义*/
func main() {//go语法要求函数定义后紧跟的大括号必须跟在函数名后面,不能回车到下一行
    /**定义变量name,并赋初值*/
    var name string = "feiyue"
    // fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n
    fmt.Println("Hello world!","This is "+name)
}

//执行结果
Hello world! This is feiyue

程序编写完成后,直接点击main函数左侧绿色按钮运行即可

Run

Go 语言的基本构成

  • 包声明
    package main 定义了包名。Go语言要求必须在源文件中非注释部分的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。

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

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

  • 常量
    常量是一个简单值的标识符,在程序运行时,不会被修改的量。
    常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
    常量的定义格式:const identifier [type] = value
    显式类型定义: const b string = "abc"
    隐式类型定义: const b = "abc"

  • 变量
    Go 语言变量名由字母、数字、下划线组成,其中首个字母不能为数字。
    声明变量的一般形式是使用 var 关键字:
    第一种,指定变量类型,声明后若不赋值,使用默认值。var name string
    第二种,根据值自行判定变量类型。 var name = "feiyue"
    第三种,根据指定变量名称,变量类型,并赋值。 var name string = "feiyue"
    第四种,省略var, 使用:=声明变量并赋值,注意:=左侧的变量不应该是已经声明过的,否则会导致编译错误。d := 100
    第五种:多变量声明,类型相同多个变量可以同时声明,然后一起赋值

var a, b int
var c string
a, b, c = 2, 3, "abc"
  • 语句 & 表达式
    Go 程序中,一行代表一个语句结束。每个语句不需要以分号 ; 结尾,这些工作都将由 Go 编译器自动完成。

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

  • 标识符
    标识符用来命名变量、类型等程序实体。一个标识符实际上就是一个或是多个字母(A~Za~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母或下划线而不能是数字。
    当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

  • 行分隔符
    在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号; 结尾,因为这些工作都将由 Go 编译器自动完成。
    如果你打算将多个语句写在同一行,它们则必须使用 ;人为区分,但在实际开发中并不鼓励这种做法。

Go 语言数据类型

在 Go 编程语言中,数据类型用于声明函数和变量。
Go 语言按类别有以下几种数据类型:Go 语言按类别有以下几种数据类型:

序 号 类型 描述
1 布尔型 布尔型的值只可以是常量 true 或者 false。var b bool = true
2 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。
3 字符串类型 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。
4 派生类型 包括:(a) 指针类型(Pointer)(b) 数组类型(c) 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型

数字类型

整型:

序号 类型 描述
1 uint8 无符号 8 位整型 (0 到 255)
2 uint16 无符号 16 位整型 (0 到 65535)
3 uint32 无符号 32 位整型 (0 到 4294967295)
4 uint64 无符号 64 位整型 (0 到 18446744073709551615)
5 int8 有符号 8 位整型 (-128 到 127)
6 int16 有符号 16 位整型 (-32768 到 32767)
7 int32 有符号 32 位整型 (-2147483648 到 2147483647)
8 int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

浮点型:

序号 类型 描述
1 float32 IEEE-754 32位浮点型数
2 float64 IEEE-754 64位浮点型数
3 complex64 32 位实数和虚数
4 complex128 64 位实数和虚数

其他数字类型

序号 类型 描述
1 byte 类似 uint8
2 rune 类似 int32
3 uint 32 或 64 位
4 int 与 uint 一样大小
5 uintptr 无符号整型,用于存放一个指针

Go 语言运算符

运算符用于在程序运行时执行数学或逻辑运算。
Go 语言内置的运算符有:

  • 算术运算符
    Go语言算术运算符包含以下7种,如下表所示:
运算符 描述 实例
+ A + B 输出结果 30
- A - B 输出结果 -10
* A * B 输出结果 200
/ B / A 输出结果 2
% 求余 B % A 输出结果 0
++ 自增 A++ 输出结果 11
-- 自减 A-- 输出结果 9

代码示例

    var a int = 36
    var b int = 10
    var c int
    //加法
    c = a + b
    fmt.Printf("a + b = %d\n", c )
    //减法
    c = a - b
    fmt.Printf("a - b = %d\n", c )
    //乘法
    c = a * b
    fmt.Printf("a * b = %d\n", c )
    //除法
    c = a / b
    fmt.Printf("a / b = %d\n", c )
    //求余
    c = a % b
    fmt.Printf("a对b求余 = %d\n", c )
    //自增
    a = 20
    a++
    fmt.Printf("a++后 a 的值为  %d\n", a )
    //自减
    a = 20
    a--
    fmt.Printf("a--后 a 的值为 %d\n", a )

//执行结果
a + b = 46
a - b = 26
a * b = 360
a / b = 3
a对b求余 = 6
a++后 a 的值为  21
a--后 a 的值为 19
  • 关系运算符
    关系运算符分为以下6种
运算符 描述 实例
== 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B) 为 False
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 (A != B) 为 True
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 (A > B) 为 False
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 (A < B) 为 True
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 (A >= B) 为 False
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 (A <= B) 为 True

代码示例

    var a int = 36
    var b int = 20
    // == 等于
    fmt.Println("a == b ",a == b )
    fmt.Println("a != b ",a != b )
    // < 小于
    fmt.Println("a < b ",a < b )
    // > 大于
    fmt.Println(" a > b ",a > b )
    // <= 小于等于
    fmt.Println("a <= b ",a <= b )
    // >= 大于等于
    fmt.Println("b >= a ",b >= a )
//执行结果
a == b  false
a != b  true
a < b  false
 a > b  true
a <= b  false
b >= a  false
  • 逻辑运算符
    逻辑运算符有3种,分别是与(&&)、或(||)、非(!)
运算符 描述 实例
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。 (A && B) 为 False
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。 (A || B) 为 True
! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。 !(A && B) 为 True

代码示例

var a bool = true
var b bool = false
fmt.Println("a && b = ",a && b )
fmt.Println("a || b = ",a || b )
fmt.Println(" !a = " , !a)

//执行结果
a && b =  false
a || b =  true
 !a =  false
  • 位运算符
    位运算符对整数在内存中的二进制位进行操作,包括五个位运算符 按位与&、按位或|、按位异或^、左移运算符<<、右移运算符>>
    Go 语言支持的位运算符如下表所示。假定 A 为60,B 为13:A = 0011 1100 B = 0000 1101
运算符 描述 实例
& 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12, 二进制为 0000 1100
| 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 (A | B) 结果为 61, 二进制为 0011 1101
^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (A ^ B) 结果为 49, 二进制为 0011 0001
<< 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 A << 2 结果为 240 ,二进制为 1111 0000
>> 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 A >> 2 结果为 15 ,二进制为 0000 1111

按位与&、按位或|、按位异或^ 的二进制运算表如下所示:

p q p & q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
  • 赋值运算符
    赋值运算符是算术运算、位运算基础上加上赋值=结合而成的运算符
运算符 描述 实例
= 简单的赋值运算符,将一个表达式的值赋给一个左值 C = A + B 将 A + B 表达式结果赋值给 C
+= 相加后再赋值 C += A 等于 C = C + A
-= 相减后再赋值 C -= A 等于 C = C - A
*= 相乘后再赋值 C *= A 等于 C = C * A
/= 相除后再赋值 C /= A 等于 C = C / A
%= 求余后再赋值 C %= A 等于 C = C % A
<<= 左移后赋值 C <<= 2 等于 C = C << 2
>>= 右移后赋值 C >>= 2 等于 C = C >> 2
&= 按位与后赋值 C &= 2 等于 C = C & 2
^= 按位异或后赋值 C ^= 2 等于 C = C ^ 2
|= 按位或后赋值 C |= 2 等于 C = C | 2
  • 其他运算符
运算符 描述 实例
& 返回变量存储地址 &a; 将给出变量的实际地址。
* 指针变量。 *a; 是一个指针变量

运算符优先级
有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右。下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低:
简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

优先级 分类 描述 关联性
1 后缀 () [] -> . ++ -- 左到右
2 一元 + - ! ~ ++ -- (type)*&sizeof 右到左
3 乘除、求余 * / % 左到右
4 加减 + - 左到右
5 移位 << >> 左到右
6 关系 < <= > >= 左到右
7 相等 == != 左到右
8 按位与 & 左到右
9 按位异或 ^ 左到右
10 按位或 | 左到右
11 逻辑AND && 左到右
12 逻辑OR || 左到右
13 条件 ?: 右到左
14 赋值 = += -= *= /= %= >>= <<= &= ^= |= 右到左
15 逗号 , 左到右
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,306评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,657评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,928评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,688评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,105评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,024评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,159评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,937评论 0 212
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,689评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,851评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,325评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,651评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,364评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,192评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,985评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,154评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,955评论 2 279

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,060评论 0 13
  • 第一个Go程序 go语言的基础知识,包括命名,变量声明,初始化,赋值等等。欢迎来我的个人博客:fizzyi//he...
    Fizz翊阅读 288评论 0 0
  • 第2章 顺序编程 2.1 变量 变量声明 变量声明的类型信息放在变量之后,放在数组的中括号之后,作返回值类型放在方...
    fjxCode阅读 404评论 0 1
  • 上一章节我们已经了解了 Go 语言的基本组成结构,本章节我们将学习 Go 语言的基础语法。 -Go 标记 Go 程...
    谁说我是小小云阅读 801评论 0 1
  • 首先,先说说什么是操作系统。 What is operating system? Anoperating syst...
    超级爱吃小粽子阅读 1,142评论 0 0