Go语言基础

目录

1.简介:

2.可执行文件创建

3.转义字符

4.注释

5.代码规范

6.Dos的常用指令

6.1dos的基本介绍

6.2 dos的基本操作原理

7.变量

7.1变量

7.2 变量的数据类型

7.3 布尔类型

7.4 string 类型

7.5 基本数据类型的默认值

7.6 基本数据类型的相互转换

7.7 练习

7.8 基本数据类型和 string 的转换

7.9 string 类型转基本数据类型

8.指针

9.值类型和引用类型

10.标识符的命名规范

11.运算符


Golang 官方标准库 API 文档, https://golang.org/pkg 可以查看 Golang 所有包下的函数和使用

1.简介:

Go 语言保证了既能到达静态编译语言的安全和性能,又达到了动态语言开发维护的高效率 ,使用一个表达式来形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 静态语言程 序的运行速度,又能达到 Python 动态语言的快速开发。

  1. 从 C 语言中继承了很多理念,包括表达式语法,控制结构,基础数据类型,调用参数传值,指针等 等,也保留了和 C 语言一样的编译执行方式及弱化的指针 举一个案例(体验): //go 语言的指针的使用特点(体验) func testPtr(num *int) { *num = 20 }

  2. 引入包的概念,用于组织程序结构,Go 语言的一个文件都要归属于一个包,而不能单独存在。

  3. 垃圾回收机制,内存自动回收,不需开发人员管理

  4. 天然并发 (重要特点)

    (1) 从语言层面支持并发,实现简单 (2) goroutine,轻量级线程,可实现大并发处理,高效利用多核。 (3) 基于 CPS 并发模型(Communicating Sequential Processes )实现

  5. 吸收了管道通信机制,形成 Go 语言特有的管道 channel 通过管道 channel , 可以实现不同的 goroute 之间的相互通信。

  6. 函数可以返回多个值。举例: //写一个函数,实现同时返回 和,差 //go 函数支持返回多个值 func getSumAndSub(n1 int, n2 int) (int, int ) { sum := n1 + n2 //go 语句后面不要带分号. sub := n1 - n2 return sum , sub }

  1. 新的创新:比如切片 slice、延时执行 defer

2.可执行文件创建

在.go文件 go build -o 文件名.exe 目标文件.go

3.转义字符

\r回车,从当前的最前面开始输出,覆盖掉以前的内容

ps:两个go文件都在main包中,即同一个包,需要新建一个文件夹作为包

虽然是main,内容不同

4.注释

在 Golang 中注释有两种形式

// 注释内容

基本语法
/*
注释内容
*/

5.代码规范

5.1 正确的缩进和空白
1) 使用一次 tab 操作,实现缩进,默认整体向右边移动,时候用 shift+tab 整体向左移
看老师的演示:
2) 或者使用 gofmt 来进行格式化 [演示]

gofmt -w 文件名.go

3) Go 语言的代码风格.
package main
import "fmt"
func main() {
fmt.Println("hello,world!")
}
上面的写法是正确的.
package main
import "fmt"
func main()
{
fmt.Println("hello,world!")

}
上面的写法不是正确,Go 语言不允许这样编写。 【Go 语言不允许这样写,是错误的!】
Go 设计者思想: 一个问题尽量只有一个解决方法

go 程序区分大小写 go 的语句后,不需要带分号 go 定义的变量,或者 import 包,必须使用,如果没有使用就会报错 go 中,不要把多条语句放在同一行。否则报错 go 中的大括号成对出现,而且风格

6.Dos的常用指令

6.1dos的基本介绍

Disk Operating System磁盘操作系统

6.2 dos的基本操作原理

6.2.1 目录操作

  1. 查看当前目录是什么 dir

  2. 切换到其他盘,比如f盘 cd /d f:

  3. 切换到当前盘的其他目录下 (使用相对路径和绝对路径演示) 案例演示:

  1. 切换到上一级:cd  ..

  2. 新建目录(make directory):md 目录名

  3. 删除目录 删除空目录:rd 目录名

7.变量

7.1变量

1.变量表示内存中的一个存储区域

2.该区域有自己的名称(变量名)和类型(数据类型)

3.golang变量的三种方式

  • 指定变量类型,声明后若不赋值,使用默认值

  • 根据值自行判定变量类型

  • 省略var,注意:=左侧的变量不应该是已经声明过的,否则会导致编译错误

4.多变量声明

在编程中,有时我们需要一次性声明多个变量,Golang也提供这样的语法

5.一次性声明多个全局变量(函数外部声明的变量)

6.变量使用的注意事项

该区域的数据值可以同一类型范围内不断变化

变量在同一个作用域内不能重名

变量=变量名+值+数据类型

Golang的变量如果没有赋初值,编译器会使用默认值

7.2 变量的数据类型

 

Go 的基本类型有

bool
​
string
​
int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr
​
byte // uint8 的别名
​
rune // int32 的别名
    // 表示一个 Unicode 码点
​
float32 float64
​
complex64 complex128

本例展示了几种类型的变量。 同导入语句一样,变量声明也可以“分组”成一个语法块。

int, uintuintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。 当你需要一个整数值时应使用 int 类型,除非你有特殊的理由使用固定大小或无符号的整数类型。

int类型

int8 第一位为符号位 -2^7----2^7 -1

int16 -32768~-32767

int32

 

Golang的整型默认为int

如何在程序查看某个变量的字节大小和数据类型

 

Golang程序中整型变量在使用时,遵守保小不保大,即在保证程序正确运行下,尽量使用占用空间小的数据类型

bit:计算机的最小存储单位。byte计算机中基本存储单元

float浮点数

var num3 float32 = -123.0000901
var num4 float64 = -123.0000901
fmt.Println("num3=", num3, "num4=", num4)
输出num3= -123.00009 num4= -123.0000901

 

字符类型

Golang中没有专门的字符类型,如果要存储单个字符,一般使用byte来保存

字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。也就是说对于传统的字符串是由字符组成的,而 Go 的字符串不同,它是由字节组成的。

对上面代码说明

  1. 如果我们保存的字符在 ASCII 表的,比如[0-1, a-z,A-Z..]直接可以保存到 byte

  2. 如果我们保存的字符对应码值大于 255,这时我们可以考虑使用 int 类型保存

  3. 如果我们需要安装字符的方式输出,这时我们需要格式化输出,即 fmt.Printf(“%c”, c1).

字符类型使用细节

  1. 字符常量是用单引号('')括起来的单个字符。例如:var c1 byte = 'a' var c2 int = '中' var c3 byte = '9'

  2. Go 中允许使用转义字符 '\’来将其后的字符转变为特殊字符型常量。例如:var c3 char = ‘\n’ // '\n'表示换行符

  3. Go 语 言 的 字 符 使 用 UTF-8 编 码 , 如 果 想 查 询 字 符 对 应 的 utf8 码 值 查看字符编码(UTF-8) 英文字母-1 个字节 汉字-3 个字节

  4. 在 Go 中,字符的本质是一个整数,直接输出时,是该字符对应的 UTF-8 编码的码值。

  5. 可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的 unicode 字符

  6. 字符类型是可以进行运算的,相当于一个整数,因为它都对应有 Unicode 码.

  7. 字符型 存储到 计算机中,需要将字符对应的码值(整数)找出来 存储:字符--->对应码值---->二进制-->存储 读取:二进制----> 码值 ----> 字符 --> 读取

  8. 字符和码值的对应关系是通过字符编码表决定的(是规定好)

  9. Go 语言的编码都统一成了 utf-8。非常的方便,很统一,再也没有编码乱码的困扰了

7.3 布尔类型

  1. 布尔类型也叫 bool 类型,bool 类型数据只允许取值 true 和 false

  2. bool 类型占 1 个字节。

  3. bool 类型适于逻辑运算,一般用于程序流程控制

7.4 string 类型

字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本

使用注意事项和细节

  1. Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本,这样 Golang 统一使用 UTF-8 编码,中文 乱码问题不会再困扰程序员。

  2. 字符串一旦赋值了,字符串就不能修改了:在 Go 中字符串是不可变的。

  3. 字符串的两种表示形式 (1) 双引号, 会识别转义字符 (2) 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果

     

  4. 字符串拼接方式                                                  

  5. 当一行字符串太长时,需要使用到多行字符串,可以如下处理

7.5 基本数据类型的默认值

在 go 中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在 go 中,默认值又叫零值

7.6 基本数据类型的相互转换

Golang 和 java / c 不同,Go 在不同类型的变量之间赋值时需要显式转换。也就是说 Golang 中数据类型不能自动转换。

表达式 T(v) 将值 v 转换为类型 T

T: 就是数据类型,比如 int32,int64,float32 等等 v: 就是需要转换的变量

基本数据类型相互转换的注意事项

  1. Go 中,数据类型的转换可以是从 表示范围小-->表示范围大,也可以 范围大--->范围小

  2. 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!

  3. 在转换中,比如将 int64 转成 int8 【-128---127】 ,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。 因此在转换时,需要考虑范围

7.7 练习

7.8 基本数据类型和 string 的转换

方式 1:fmt.Sprintf("%参数", 表达式)

参数需要和表达式的数据类型相匹配 fmt.Sprintf().. 会返回转换后的字符串

 

方式 2:使用 strconv 包的函数

7.9 string 类型转基本数据类型

使用时 strconv 包的函数,转bool类型

转int类型

 

 

PS:在将String类型转成基本数据类型时,要确保String类型能够转成有效的数据,例如不能把“hello”转成一个整数,Golang直接将其转成0,float变成0,bool变成false

 

输出

“true"可以转为bool

8.指针

1.基本数据类型,变量存的就是值,也叫值类型

2.获取变量的地址,用&                                                        

3.指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值。

比如var ptr *int = &num //指针变量ptr

4.获取指针类型所指向的值,使用:*,var ptr * int,使用*ptr获取ptr指向的值

9.值类型和引用类型

5.值类型,都有对应类型,形式为 *数据类型,比如int的对应的指针就是 *int,float32对应的指针类型就是 *float32,依次类推

6.值类型包括,int系列,float系列,bool,string,数组和结构体struct

7.应用类型:指针,slice切片,map,管道chan,interface等都是应用类型

值类型和应用类型区别:

值类型:变量直接存储值,内存通常在栈中分配

引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据,内存通常在堆上分配,当没有任何变量引用这个地址时,该地址对应的数据空间就成为一个垃圾,有GC来回收

10.标识符的命名规范

3.18.1 标识符概念

  1. Golang 对各种变量、方法、函数等命名时使用的字符序列称为标识符

  2. 凡是自己可以起名字的地方都叫标识符

3.18.2 标识符的命名规则

  1. 由 26 个英文字母大小写,0-9 ,_ 组成

  2. 数字不可以开头。var num int //ok var 3num int //error

  3. Golang 中严格区分大小写。 var num int var Num int 说明:在 golang 中,num 和 Num 是两个不同的变量

  4. 标识符不能包含空格。

3.19 系统保留关键字

3.20 系统的预定义标识符

11.运算符

运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等

  1. 算术运算符

  2. 赋值运算符

  3. 比较运算符/关系运算符

  4. 逻辑运算符

  5. 位运算符

  6. 其它运算符

11.1 算术运算符

+, - , * , / , %, ++, -- , 重点讲解 /、%

自增:++ 自减:--

演示 % 的使用特点
// 演示 % 的使用
// 看一个公式 a % b = a - a / b * b
fmt.Println("10%3=", 10 % 3) // =1
fmt.Println("-10%3=", -10 % 3) // = -10 - (-10) / 3 * 3 = -10 - (-9) = -1
fmt.Println("10%-3=", 10 % -3) // =1
fmt.Println("-10%-3=", -10 % -3) // =-1

11.2 算术运算符使用的注意事项

1) 对于除号 "/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃
小数部分。 例如: x := 19/5 ,结果是 3
2) 当对一个数取模时,可以等价 a%b=a-a/b*b , 这样我们可以看到 取模的一个本质运算。
3) Golang 的自增自减只能当做一个独立语言使用时,不能这样使用

4) Golang 的++ 和 -- 只能写在变量的后面,不能写在变量的前面,即:只有 a++ a-- 没有 ++a
--a

 

5) Golang 的设计者去掉 c / java 中的 自增自减的容易混淆的写法,让 Golang 更加简洁,统一。(强
制性的)

11.关系运算符(比较运算符)

1) 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false
2) 关系表达式 经常用在 if 结构的条件中或循环结构的条件中

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值