Golang 笔记
标志:金花鼠gordon
Golang 笔记目录
- Golang 笔记
- Google为什么要创作Go语言
- golang执行流程分析
- golang开发注意事项
- golang转义字符
- golang中常见的问题以及解决方法
- golang中的注释
- golang的规范以及代码风格
- golang官方编程指南
- golang变量
- golang变量数据类型
- golang整数基本数据类型介绍
- golang整型使用细节
- golang浮点类型
- golang整型使用细节
- golang字符类型
- golang字符使用细节
- golang布尔类型 bool
- golang字符串类型 string
- golang基本数据类型默认值(零值)
- golang基本数据类型转换
- golang指针
- golang值类型和引用类型
- golang标识符的命名规范
- golang预定义标识符(36个)
Google为什么要创作Go语言
1)计算机硬件技术跟新频繁
2)软件系统复杂度高、维护成本高
1、风格不统一
2、计算能力不够
3、不能处理大并发
3)兼顾开发速度以及开发速度
golang执行流程分析
1)先对源码进行编译,在执行(go build)
XXX.go --> XXX.exe -->执行
2)源码直接运行(go run)
XXX.go --> 执行
golang开发注意事项
1)源码文件以".go"为扩展名
2)golang程序入口是main()
3)golang是严格区分大小写
4)Go方法是由一条一条语句实现的,每个语句在结束后不需要加分号
5)Go编译器是一行一行编译的,不能将多条语句写在一行
6)Go语言定义的编译或者import的包如果没有使用到编译不能通过
7)大括号都是成对出现的
golang转义字符
1)\t 制表符
2)\n 换行
3)\\ 斜杠
4)" 一个"
5)\r 回车
golang中常见的问题以及解决方法
1)找不到文件
–源文件名不存在或者写错,或者当前路径错误
2)语法错误
–尝试去看懂编译器报错信息
golang中的注释
目的:提高代码可维护性
行注释://
块注释:/**/
golang的规范以及代码风格
1)推荐使用行注释来注释整个方法和语句
2)有正确的缩进和空白
3)运算符的两边各加一个空格
golang官方编程指南
Golang官方网站:https://golang.org/#
golang变量
变量是程序的基本组成单位
变量相当于内存中一个数据存储空间
1)声明变量
2)变量赋值
3)使用变量
package main
import "fmt"
func main() {
//声明变量
var i int
//变量赋值
i = 10
//使用变量
fmt.Printf("%d",i)
}
注意事项:
1)声明变量后不赋值使用默认值
2)根据值自行判断变量类型(类型推导)
3)省略var使用:=推导
4)多变量声明
package main
import "fmt"
func main() {
//声明变量后不赋值使用默认值
var i int
//根据值自行判断变量类型(类型推导)
var f = 10.01
//省略var使用:=推导
str := "string"
//多变量声明
var a,b,c,d,e int
}
golang变量数据类型
golang整数基本数据类型介绍
有符号
类型 | 所占空间 | 取值范围 |
---|---|---|
int8 | 1字节 | -2^7 ~ 2^7-1 |
int16 | 2字节 | -2^15 ~ 2^15-1 |
int32 | 4字节 | -2^31 ~ 2^31-1 |
int64 | 8字节 | -2^63 ~ 2^63-1 |
无符号
类型 | 所占空间 | 取值范围 |
---|---|---|
uint8 | 1字节 | 0 ~ 2^8-1 |
uint16 | 2字节 | 0 ~ 2^16-1 |
uint32 | 4字节 | 0 ~ 2^32-1 |
uint64 | 8字节 | 0 ~ 2^64-1 |
golang整型使用细节
1)golang整数分类 有符号/无符号(int/uint)
在32位的机器上面大小为4字节
在64位的机器上面大小位8字节
2)整型默认声明为int型
3)查看数据所占字节大小
//数据类型查看
//输出为int
var i = 100
fmt.Printf("%T",i)
//查看数据所占字节大小
//64位机器输出8 32位机器输出4
fmt.Printf("%T",unsafe.Sizeof(i))
golang浮点类型
浮点类型就是用于存放小数的
var f_32 float32 = 89.124
var f_64 float64 = 888889.12456
golang整型使用细节
1)golang浮点类型有固定的长度,不受操作系统影响
2)golang的浮点类型默认是float64
//数据类型查看
//输出为flost64
var f = 10.1
fmt.Printf("%T",f)
golang字符类型
1)Golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。
2)字符数组就是一串固定长度的字符连接起来的字符序列。对于传统的字符串是由字符组成的,而Go的字符串不同,它是由单个字节连接起来的。
3)如果我们保存的字符在ASCII表的,比如[0-1,a-z,A-Z…]直接可以保存到byte
4)如果我们保存的字符对应码值大于255如汉字,这时我们可以考虑使用int类型保存
5)如果我们需要按照字符的方式输出,这时我们需要格式化输出,即fmt.Printf(“%c”,c1)
golang字符使用细节
1)字符常量是用单引号(‘’)括起来的单个字符。
例如:var c1 byte = ‘a’ var c2 int = ‘中’ var c3 byte = ‘9’
2)Go中允许使用转义字符’\’来将其后的字符转变为特殊字符型常量。
例如:var c3 char = ‘\n’//'\n’表示换行符
3)Go语言的字符使用UTF-8编码,英文字母-1个字节,汉字-3个字节。
4)在Go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值。
5)可以直接给某个变量赋一个数字,然后按格式化输出时%c,会输出该数字对应的unicode字符。
6)字符类型是可以进行运算的,相当于一个整数,因为它都对应有Unicode码。
7)字符型存储到计算机中,需要将字符对应的码值(整数)找出来:
存储:字符—>对应码值---->二进制–>存储
读取:二进制---->码值---->字符–>读取
8)字符和码值的对应关系是通过字符编码表决定的。
9)Go语言的编码都统一成了utf-8。非常的方便,很统一,再也没有编码乱码的困扰了。
golang布尔类型 bool
1)布尔类型也叫bool类型,bool类型数据只允许取值true和false。不可以0或非0的整数替代false和true,这点和C语言不同。
2)bool类型占1个字节。
3)bool类型适于逻辑运算,一般用于程序流程控制。
golang字符串类型 string
字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。
1)Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再产生困扰。
2)字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的。
var str = “hello” str[0] = “a”//会报错
3)字符串的两种表示形式:
1)双引号,会识别转义字符,如str := "abc\nabc"输出的时候会换行。
2)反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果:
str := `
abc
def
ghi\nk
`
4)字符串拼接
str := "hello" + "world"
str += "haha"
golang基本数据类型默认值(零值)
在go中,数据类型都有一个默认值,当程序员没有赋值时,就会保留默认值,在go中,默认值又叫零值。
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0 |
字符串 | 0 |
布尔类型 | false |
golang基本数据类型转换
Golang和java/c不同,Go在不同类型的变量之间赋值时需要显式转换,即var n1 float32要等于float32(i)而不能直接等于i。也就是说Golang中数据类型不能自动转换。
T(v):将值v转换为类型T:
T:就是数据类型,比如int32,int64,float32等等。
v:就是需要转换的变量
var i int32 = 100
var n1 float32 = float32(i)
var n2 int64
n2 = i + 20//会报错
//n2 = int64(i) + 20//正确写法
1)Go中,数据类型的转换可以是从表示范围小–>表示范围大,也可以范围大—>范围小
2)被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化!
3)在转换中,比如将int64转成int8【-128—127】,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样。因此在转换时,需要考虑范围。
golang指针
1)基本数据类型,变量存储的就是值,也叫值类型
2)获取变量的地址,使用取址符&,
3)指针类型,指针变量存放的是一个地址,这个地址指向的空间才是值
4)获取指针类型所指向的值,使用解引用符号*
golang值类型和引用类型
1)值类型:基本数据类型 int、float、string 、 数组、struct
通常实在栈中分配
2)引用类型:指针、slice切片、管道chan、interface、都是引用类型
变量存储的是一个地址,这个地址对应的空间才是指针存储数据,内存通常在堆空间上分配,当没有任何变量引用这个地址的时候,该地址对应的数据空间成为一个垃圾空间,由gc回收
golang标识符的命名规范
1)golang 对各种变量、方法、函数名命名是使用的字符序列成为标识符
2)凡是自己可以起名字的地方都叫标识符
规则
1)由26个字母大小写,0-9,组成
2)数字不能开头
3)golang中严格区分大小写
4)标识符中不能存在“ ”空格
5)单独一个“”是go中的特殊标识符,表示空标识符,可以代表任何其他的标识符,但它本身的是会被忽略,左右仅能作为被占位符使用,不能作为标识符使用
6)不能以系统保留关键字作为标识符
Go 共有 25 个保留关键字,各有其作用,不能用作标识符。Go 的 25 个关键字按照作用可以分为 3 类,分别为包管理、程序实体声明与定义与程序流程控制。
包管理(2个):
import | package |
---|
程序实体声明与定义(8个):
chan | const | func | interface | map | struct | type | var |
---|
程序流程控制(15个):
break | case | continue | default | defer | else | fallthrough | for | go | goto | if | range | return | select | switch |
---|
标识符命名注意事项
1)包名:包名尽量与文件名保持一致,尽量采用有意义的包名,简短有意义,不要和标准库冲突
2)变量名、函数名、常量名:采用驼峰法
3)如果变量名、函数名、常量名首字母大写,则可以被其他包访问,如果首字母为小写则只能在本包中只用
(可以理解为:首字母大小为共有,首字母小写为私有)
golang预定义标识符(36个)
基础数据类型和系统内嵌函数
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 | copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 | int32 | int64 | iota | len | make | new | nil | panic | uint64 | println | real | recover | string | true | uint | uint8 | uintptr |
---|