基本数据类型
数据类型 | 默认值 |
---|---|
bool | false |
string | 空字符串"" |
int、int8、int16、int32、int64 | 0 |
uint、uint8、uint16、uint32、uint64、uintptr | 0 |
byte (uint8) | 0 |
rune (int32) | 0 |
float32、float64 | 0.0 |
complex64、complex128 | (0+0i) |
*point | nil |
一般变量的声明与初始化
/****************** 方法 1 ****************/
var name type
name = value
// 批量赋值
var (
a int
b string
c []float32
d func() bool
e struct {
x int
}
)
/****************** 方法 2 ****************/
var name = value
/****************** 方法 3 ****************/
name := value
// 如果 name 已经被声明过,但依然使用:=时编译器会报错。
// 批量赋值
name1, name2 := value 1, value 2
指针变量的声明与初始化
GO语言中的指针不可以进行指针运算,只允许你控制特定集合的数据结构、分配的数量以及内存访问模式。下面是指针变量的声明:
// 指针的声明
/****************** 方法 1 ****************/
var name *type
/****************** 方法 2 ****************/
name :=new(type)
// 指针的赋值
var name type
var point *type
point = &name
常量
// 常量的声明与赋值
const name = value
iota生成器
// 枚举
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuseday
Wednesday
Thursday
Friday
Saturday
)
strconv方法
strconv包提供了字符串与简单数据类型之间的类型转换功能。可以将简单类型转换为字符串,也可以将字符串转换为其它简单类型。
容器变量
数组的声明与初始化
// 数组声明
var name []type
// 数组初始化
var name [N]type = [N]type {
value1, value2, value3}
name := [N]type {
value1, value2, value3}
name := [...]type{
value1,value2,value3}
// 根据数组长度自动填充[N]
// [...]中的... == 3
多维数组的声明与初始化
声明
/********多维数组声明********/
var array_name [size1][size2]...[sizen] array_type
/********多维数组的赋值********/
// 声明一个二维整型数组,两个维度的长度分别是 4 和 2
var array [4][2]int
// 使用数组字面量来声明并初始化一个二维整型数组
array = [4][2]int{
{
10, 11}, {
20, 21}, {
30, 31}, {
40, 41}}
// 声明并初始化数组中索引为 1 和 3 的元素
array = [4][2]int{
1: {
20, 21}, 3: {
40, 41}}
// 声明并初始化数组中指定的元素
array = [4][2]int{
1: {
0: 20}, 3: {
1: 41}}
切片
切片默认指向一段连续内存区域,可以是数组,也可以是切片本身。
slice [start:end]
添加元素
在数组中添加新元素。
// 在name中追加elements
name = append(name, elements)
复制
slice1 := []int{
1, 2, 3, 4, 5}
slice2 := []int{
5, 4, 3}
copy(slice2, slice1) // 只会复制slice1的前3个元素到slice2中
copy(slice1, slice2) // 只会复制slice2的3个元素到slice1的前3个位置
range()
// 和 for 搭配使用
for _,i := range(list){
//表达式
}
// range返回 index 与 value 两个值
map
// map的声明
var mapname map[keytype]valuetype
// 通过make声明复制map 100是map的容量
map := make(map[string]float, 100)
map可以通过 for-range进行遍历。range()返回值为k, v。
for k, v := range map{
fmt.Println(k, v)
}
map通过delete()删除键值对。
delete(map,key)
list
// 通过 container/list 包的 New() 函数初始化 list
name := list.New()
// 通过 var 关键字声明初始化 list
var name list.List
// 对list操作
package main
import "container/list"
func main() {
l := list.New()
// 尾部添加
l.PushBack("canon")
// 头部添加
l.PushFront(67)
// 尾部添加后保存元素句柄
element := l.PushBack("fist")
// 在fist之后添加high
l.InsertAfter("high", element)
// 在fist之前添加noon
l.InsertBefore("noon", element)
// 使用
l.Remove(element)
// 遍历访问
for i := l.Front(); i != nil; i = i.Next() {
fmt.Println(i.Value)
}
}