Go最基础语法小总结

我就会略略略

一、Go环境

二and三,Go发展历史和路径配置自己随便查查
四、go语法
4.1 变量
4.2 常量
4.3 数据类型
4.3.1 整型
4.3.2 数字字面量语法
4.3.2 浮点型
4.3.3 复数
4.3.4 布尔值
4.3.5 字符串 【区别Java】
4.3.6 字符串转义符
4.3.7 多行字符串
4.3.8 byte和rune类型
4.3.9 修改字符串
4.4 类型转换
五、流程控制 if for
5.1 if
5.2 for
5.3 for range
5.4 switch case
5.5 goto
5.6 break
5.7 continue
六、数组
6.1 数组
6.2 多维数组
6.3 初始化
6.4 数组循环
6.5 数组的本质
6.6 数组copy
七、切片
7.1 本质
7.2 go 的slice 和 数组比较
7.3 slice语法
7.3.1 声明
7.3.2 切片表达式
7.3.3 make
7.3.4 切片判断
7.3.5 slice的赋值拷贝
7.3.6 slice 的遍历
7.3.7 API
7.3.8 examples
八、map
8.1 声明
8.2 判断某个键是否存在
8.3 遍历map
8.4 删除
一、Go环境
安装步骤略。

二三:略

四:

4.1

变量先声明再使用;同一个作用域不能重复声明
跟java类似,在声明时会初始化时机默认值
整型–>0
浮点型–> 0
字符串变量 --> 空串 【这个与java倒是不一样】
切片、函数、指针变量 --> nil
支持类型推导
支持函数内 短声明
支持匿名变量
匿名变量不占用命名空间,不分配内存,也不存在重复声明(lua中的哑元变量)
字符 _ 用于占位,表示忽略值

4.2 常量

常量定义的时候, 必须赋值,且之后不能再去更改了。
支持一次声明多个常量
一次声明多个常量时,若省略了值,则表示和上一行值相同
iota : const 语句块的行索引,枚举中用得比较多
4.3 数据类型
除了基本的整型、浮点型、布尔型、字符串之外,还有数组、切片、函数、结构体、map、通道等。可见,Go中的数据类型十分丰富。

4.3.1 整型
uinit8 --> 无符号 8位 整型(0 --> 255),其实就是 byte

下面介绍特殊整型:

uint --> 32位系统上是uint 32 (无符号32位整型), 64位系统上是 uint64 (无符号64位整型)
int --> 32位系统上是 int32 (有符号32位整型),64位系统上是 int64(有符号64位整型)
uintptr --> 无符号整型,用于存放一个指针
注意:

在使用int 和 uint ,不能假定是32 或 64 位,要考虑不同平台上的差异
len()返回值根据不同平台而不同。切片、map 元素数量可以用 int表示。在涉及二进制运输、读写文件时,为保持文件结构不受平台影响,不要使用int uint
4.3.2 数字字面量语法
主要是为了方便以二进制、八进制、十六进制浮点数定义数字。

4.3.2 浮点型

float32
float64
4.3.3 复数
complex64
complex128
4.3.4 布尔值
也不过是true false .
go语言中:

不能将整型强转为布尔值
布尔数不能参与数值运算,不能与其他类型数据转换

4.3.5 字符串 【区别Java】
Go中的字符串是原生数据类型,使用字符串跟使用int 这些数据类型一样。Go字符串内部使用 UTF-8 编码。可以直接 s:= "非AscII字符"

4.3.6 字符串转义符
\r 回车
\n 换行
\t  制表符
\' 单引
\''  双引
\\  反斜杠

4.3.6 byte和rune类型
Go中的字符有两种:

uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
rune类型,代表一个 UTF-8字符。
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。
UTF-8 编码下,一个中文字符占3~4 个字节,我们不能简单按照字节去修改包含中文的字符串,否则可能乱码。

GO的字符串底层是一个byte数组,可以和byte[](切片)相互转化。字符串的长度就是 byte[]的长度。rune类型用来表示 utf-8 字符,一个 rune字符由一个或多个byte 组成。

Go中字符串也是不能修改的。我们常说的修改一个字符串的操作实际上是复制一个新字符串的过程。

注意,在java中, 字符串是一个char[],和go还是不一样的。

举个栗子:
简单粗暴地记住一句话即可:
遍历字符串的元素,要使用 for range,否则遍历的是底层byte数组。

4.4 类型转换
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

T(表达式) 语法实现了强转

同时,%T 可以打印出变量的数据类型

fmt.Printf("%T", "字符串")
1
五、流程控制 if for
5.1 if        略
5.2 for        略
go 语言中,for 可以当做while一样来用

5.3 for range
for range遍历数组、切片、字符串、map 及通道(channel)

数组 、切片、字符串 返回索引和值
map ,返回key和值
channel ,返回 通道内的值

5.4 Switch case.  略

5.5 goto
略。goto 尽量不要用

5.6 break
break可以结束 for switch select的代码块。
break 还可以 在语句后面加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的 for switch select代码块上。

5.7 continue
结束本次循环,开始下一次循环。
continue语句后添加标签时,表示开始标签对应的循环

六、数组
6.1 数组
数组: 同一种数据类型元素的集合。使用时,可以修改数组成员,但是不能改变数组大小。定义如:

var a [5]int

数组的长度必须是常量,并且长度是数组类型的一部分
数组长度定义后,不能再去修改
[5]int [10]int 是不同类型的数组
6.2 多维数组
go 支持多维数组

6.3 初始化
数组有多种初始化方式。

6.4 数组循环
for 循环
for …range …
6.5 数组的本质
1、数组是值类型:
赋值和传参会复制整个数组,若改变副本的值,不会改变本身的值。
2、数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
3、[n]*T表示指针数组,*[n]T表示数组指针 。

七、切片
7.1 本质
slice 本质就是个数组指针 + 长度 + 容量。
切片本身不存值,存值的是切片指向的底层数组
切片指向的数组的内存必须是连续的
go的切片类似Java 的ArrayList 。不过使用起来差别还是挺大的。

7.2 go 的slice 和 数组比较
Slice 是动态数组,可变长;数组长度是数组的一部分,是定长的
Slice 是传址,而数组是传值
7.3 slice语法
7.3.1 声明
var name []T

跟数组声明比较起来,只不过是不需要指定的 长度而已。
7.3.2 切片表达式
指从 数组、字符串,指向数组或字符串的指针构造字符串或切片。有两种形式:简单表达式 + 完整表达式。

7.3.3 make
上一节,是基于 数组来构造一个切片,假如我们要动态创建一个切片,
则 make([]T, size, cap)

7.3.4 切片判断
1、判断切片是否为空不能使用s == nil,而应该使用len == 0 (任何情况下都是如此,即使是声明但是没有初始化的)

2、切片之间不能比较,不能使用== 直接判断两个切片是否具有完全一样的元素。切片只能和 nil 比较。

一个 nil值的切片,没有底层数组,切片长度、容量都为0。但是反过来则不一定:我们不能说,一个长度、容量=0 的切片一定是nil。

7.3.5 slice的赋值拷贝
拷贝前后,两个slice实际上共享了同一个底层数组,因此对一个slice的增删改会影响到另一个slice。【传址】

7.3.6 slice 的遍历
slice的遍历:

for
for range
7.3.7 API
append
append操作可能引起扩容,扩容策略会因为元素类型的不同而不同
copy --> 复制切片
切片中删除元素
slice并没有直接删除元素的API
要从切片a中删除索引为index的元素,操作方法是a = append(a[:index], a[index+1:]...)

八、map
8.1 声明
map是 引用类型,必须先初始化才能使用。

声明语法: map[KeyType]ValueType

map类型的变量默认初始值为<nil>,需要先make

8.2 判断某个键是否存在
go提供了一种很有意思的方法来查实某个key是否存在:

8.3 遍历map
for range        用法略

8.4 删除
delete(map,key)
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1. 变量和常量声明 Go语言中,使用var关键字声明变量,常量使用const关键字声明。 ``` var name string = "Tom" var age int = 18 const pi = 3.14 ``` 2. 数据类型 Go语言中,基本数据类型包括整型、浮点型、布尔型、字符串型等。 ``` var num int = 10 var f float64 = 3.14 var flag bool = true var str string = "hello world" ``` 3. 控制语句 Go语言中,支持if、for、switch等控制语句。 ``` if num > 0 { fmt.Println("positive") } else { fmt.Println("negative") } for i := 0; i < 10; i++ { fmt.Println(i) } switch num { case 1: fmt.Println("one") case 2: fmt.Println("two") default: fmt.Println("others") } ``` 4. 函数 Go语言中,使用func关键字定义函数。 ``` func add(a, b int) int { return a + b } result := add(1, 2) fmt.Println(result) ``` 5. 包和导入 Go语言中,使用package关键字定义包,使用import关键字导入包。 ``` package main import "fmt" func main() { fmt.Println("hello world") } ``` 6. 结构体和方法 Go语言中,使用type关键字定义自定义结构体,可以给结构体定义方法。 ``` type Person struct { name string age int } func (p Person) sayHello() { fmt.Println("hello, my name is", p.name) } p1 := Person{name: "Tom", age: 18} p1.sayHello() ``` 7. 指针 Go语言中,使用&符号获取变量的地址,使用*符号获取指针指向的值。 ``` num := 10 ptr := &num fmt.Println(*ptr) ``` 8. 数组和切片 Go语言中,使用[]定义数组和切片,数组长度固定,切片长度可变。 ``` arr := [3]int{1, 2, 3} slice := []int{1, 2, 3} ``` 9. map Go语言中,使用map关键字定义map。 ``` m := make(map[string]int) m["one"] = 1 m["two"] = 2 fmt.Println(m["one"]) ``` 10. 接口 Go语言中,使用interface关键字定义接口,一个类型只要实现了接口中定义的所有方法,就可以被认为是实现了该接口。 ``` type Shape interface { area() float64 } type Rectangle struct { width float64 height float64 } func (r Rectangle) area() float64 { return r.width * r.height } r := Rectangle{width: 10, height: 5} var s Shape = r fmt.Println(s.area()) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值