go语言自学笔记

语言结构

标识符包括常量、变量、类型、函数名、结构字段等
若标识符以大写字母开头,则它的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包)——导出;标识符如果以小写字母开头,则对包外是不可见的。

在习惯上,Go语言程序员推荐使用 驼峰式 命名,当名字有几个单词组成的时优先使用大小写分隔,而 不是优先用下划线分隔。

变量

声明多个变量
var 变量名字 类型 = 表达式
1.省略类型

2.省略“= 表达式”

默认零值:
数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用 类型(包括slice、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每 个元素或字段都是对应该类型的零值。

3.省略var
以“名字 := 表达 式”形式声明变量,变量的类型根据表达式来自动推导。
注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。

声明多个变量

同类型: var name1, name2 type = initialvalue1, initialvalue2。
不同类型:
var (
name1 = initialvalue1,
name2 = initialvalue2
)

空白标识符 _ 被用于抛弃值

数据类型

1.bool型
bool 类型表示一个布尔值,值为 true 或者 false。

2.数字类型:int float32 float64 支持整型和浮点型 也支持复数,其中位运算采用补码。

3.字符串string
内置的len函数可以返回一个字符串中的字节数目(不是rune字符数目),索引操作s[i]返回第i个字节 的字节值,i必须满足0 ≤ i< len(s)条件约束。

4.派生类型:
指针、数组、struct、Channel、函数、切片、接口类型、Map

5.其余类型:
uint8 uint16 uint32 uint64 int8 int16 int32 int64 float32 float64
complex64:32位实数与虚数 complex128:64位实数与虚数
byte:类似unit8
rune:类似int32
uintptr:无符号整型 用于存放一个指针

类型转换
把 v 转换为 T 类型的语法是 T(v)。

常量

const identifier [type] = value
可以省略type

iota 常量生成器
iota 在 const关键字出现时将被重置为 0,const 中每新增一行常量声明将使 iota 计数一次。

数组

一个数组的表示形式为 [n]T。n 表示数组中元素的数量,T 代表每个元素的类型。数组的大小是类型的一部分。
可以忽略声明数组的长度n,并用 … 代替,让编译器自动计算长度。
a := [3]int{12, 78, 50} a := […]int{12, 78, 50}

Go 中的数组是值类型而不是引用类型。这意味着当数组赋值给一个新的变量时,该变量会得到一个原始数组的一个副本。如果对新变量进行更改,则不会影响原始数组。同样,当数组作为参数传递给函数时,它们是按值传递,而原始数组保持不变。

使用 range 迭代数组
通过使用 for 循环的 range 方法来遍历数组。range 返回索引和该索引处的值。

多维数组
var a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}}

切片

带有 T 类型元素的切片由 []type表示

也可以使用make函数来创建切片:
var s1 []type = make([]type, len) 或s1 := make([]type, len)

s := arr[startIndex:endIndex] s := arr[startIndex:] s := arr[:endIndex]

一个slice由三个部分构成:指针、长度 和容量。指针指向第一个slice元素对应的底层数组元素的地址,要注意的是slice的第一个元素并不一 定就是数组的第一个元素。长度对应slice中元素的数目;长度不能超过容量,容量一般是从slice的开始位置到底层数据的结尾位置。内置的len和cap函数分别返回slice的长度和容量。

对切片所做的任何修改都会反映在底层数组中。

追加切片元素
append 函数的定义是 func append(切片名[]T,参数 … T)[]T。

使用 copy 函数 func copy(dst,src[]T)int 来生成一个切片的副本。
copy(numbers1,numbers) 是拷贝numbers的内容到numbers1

指针

指针变量的类型为 *T,该指针指向一个 T 类型的变量。
*来获取指针所指向的内容,&取变量内存地址

指针的解引用
指针的解引用可以获取指针所指向的变量的值, *a。

指针数组:var ptr [MAX]*int;
向函数传递一个数组指针参数,并在函数内修改数组,最好使用切片来处理。

Map

Map 是一种无序的键值对的集合。
创建
使用 make 函数:make(map[type of key]type of value)
添加元素

ages := map[string]int{
 "alice": 31,
 "charlie": 34,
   }

或者

ages := make(map[string]int)
 ages["alice"] = 31
 ages["charlie"] = 34 

删除元素
使用内置的delete函数可以删除元素: delete(map名, key)

获取元素
获取 map 元素的语法是 map名[key] 。

判断 map 中是否存在这个 key:value, ok := map[key]
if ok == true,表示 key 存在,key 对应的值就是 value ,false表示 key 不存在。

遍历 map 中所有的元素需要用 for range 循环。不保证每次执行程序获取的元素顺序相同。

改变元素
和 slices 类似,map 也是引用类型。当 map 被赋值为一个新变量的时候,它们指向同一个内部数据结构。因此,改变其中一个变量,就会影响到另一变量。

结构体

命名的结构体
创建了名为 Employee 的新类型

type Employee struct {
    firstName string
    lastName  string
    age       int
}

匿名结构体
没有定义任何结构体类型

var employee struct {
    firstName, lastName string
    age int
}

或者

e:= struct {
        firstName, lastName string
        age, salary         int
    }

访问结构体
点号操作符 . 用于访问结构体的字段

可以创建指向结构体的指针,例如
e := &Employee{" , , ,“}
fmt.Println((*emp8).firstName)
这里(*e).firstName表示访问结构体 e 的 firstName 字段

匿名字段
只有类型,而没有字段名的字段,匿名字段的名称就默认为它的类型

type Person struct {  
    string
    int
}

嵌套结构体

提升字段
结构体中匿名的结构体类型字段

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值