Go 学习笔记3——【go数据类型】

基本数据类型

数据类型 默认值
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包提供了字符串与简单数据类型之间的类型转换功能。可以将简单类型转换为字符串,也可以将字符串转换为其它简单类型。

学习文档:Go基础系列:数据类型转换(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)
    }
}

猜你喜欢

转载自blog.csdn.net/zd398900463/article/details/109102162