基本数据类型

int型

根据平台不同而不同,但即使是int64 或int32 和 int并不同,需要转换

 

浮点型

默认是float64

浮点数在进行比较的使用最好用math包的模块,用== 并不精确

import "math"
math.Fdim(math.Fdim(f1,f2)<p) 

 

 

字节类型

一个是byte代表的是uint8的别名,代表utf-8的一个字节
一个是rune代表的是代表是单个Unicode字符uint32

 

 

数组

var a [32] byte;
[2*N] struct { x, y int32 }
[1000]*float64
[3] [5] int
[2][2][2] float64
数组的创建
for i, v := range array {
    。。。
}
数组的遍历

 

切片

两种创建方式:在数组上切片,新创建。

var my Array [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
var my Slice []int = my Array[:5]
在数组上切片
my Slice1 := make([]int, 5)
my Slice2 := make([]int, 5, 10)   // 第一个是len(), 第二个是cap()
my Slice3 := []int{1, 2, 3, 4, 5}
直接创建

切片的append用法

my Slice = append(my Slice, my Slice2...) 
// 注意第一个可以是列表,但是第二个必须是相应的数据类型,如果不是用...打散!
追加用法

切片有copy()方法,copy(slice1, slice2), 并且两个切片len可以不同。在长度不同的情况下,复制部分

 

package main

import "fmt"

func add(a [] int) {
    a[0] += 1
}

func addarray(a [4] int)  {
    a[0] += 1
}
func addarray_pointer(a *[4] int)  {
    a[0] += 1
}

func main() {
    var arra [4] int  = [4] int {10,2,3,4}  // 数组
    addarray(arra)    // 数组是值类型
    fmt.Println(arra)   // 这里不变

    addarray_pointer(&arra)      // 传入数组指针
    fmt.Println(arra)     // 这里改变了

    a := []int{1,2,3,4}    // 定义切片
    add(a)    // 不能传指针,且改变的是自身
    fmt.Println(a[0])
}
!切片不是值类型,不能写指针

 

 

 

 

 

Map类型

mymap  = make(map[string] PersonInfo)
mymap = make(map[string] PerionInfo , 100)
my Map = map[string] Person Info{
  "1234": Person Info{"1", "Jack", "Room 101,..."},
} 
创建方法
value, ok := my Map["1234"]
if ok {
    ... // 如果有ok为true否则为false
}
取值
delete(mymap,"1234")
删除
    var mymap map[string] int = map[string] int {"123":456,"233":445}
    for i,k:= range mymap {
        fmt.Println(i,k)
    }
遍历
mymap["113"] = 123
赋值

 map并不是值类型,所以不能使用指针,函数传递是传递自身