Go语言基础-数组

Go语言基础第一章

 

 

  1. 变量声明

 

var v1 int

var v2 string 

var v3 [10]int  #array

var v4 []int #array slice

var v5 struct{

f int

}

var v6 *int 

var v7 map[string]int

var v8 func(a int) int

 

避免重复,可以将声明放在一起

var (

v1 int

v2 string

)

 

  1. 变量初始化

 

Go可以初始化右侧推导出该变量应该初始化成那种类型

var v1 int = 10

var v2 = 10

v3 := 10

 

  1. 常量定义 const

 

const Pi float64 = 3.141592653589323846

 

package main

 

import (

"fmt"

"math/cmplx"

)

 

func modify(array [5]int) {

array[0] = 10

fmt.Println("in modify(), array values:", array)

}

 

func main() {

// 复数类型, 可以通过内置函数real(), imag()获得实部和虚部,还可以通过cmplx获得更多用法

v1 := complex(3.2, 12)

fmt.Println(cmplx.Abs(v1))

fmt.Println(real(v1))

fmt.Println(imag(v1))

 

//字符串, go中字符串也是一种基本类型

//Printf才支持%式的输出, Println不支持

var str string

str = "Hello world"

ch := str[0]

fmt.Printf("the length of %s is %d \n", str, len(str))

fmt.Printf("the first character of \"%s\"  is %c \n", str, ch)

 

//字符串遍历

str1 := "Hello, 世界"

n := len(str1)

for i := 0; i < n; i++ {

ch := str1[i] //ch类型为byte

fmt.Println(i, ch)

}

 

for i, ch := range str1 {

fmt.Println(i, ch) //ch类型为rune

}

 

//数组,

// 1值类型: 所有的值类型变量在赋值和作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,

// 则在函数调用时该 参数将发生数据复制。因此,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所 传入数组的一个副本。

 

array := [5]int{1, 2, 3, 4, 5}

modify(array)

fmt.Println("in main(), array values:", array)

 

//2.数组切片slice

// go中数组的长度定义后无法修改, 数组是值类型, 每次传递都产生一个副本, 使用slice来祢补不足

 

var myArray [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

var mySlice []int = myArray[:5]  //基于数组创建切片

mySlice1 := make([]int, 5)       //初始元素个数为5个的切片

mySlice2 := make([]int, 5, 10)   //5个元素,初始为0, 并预留10个元素的空间

mySlice3 := []int{1, 2, 3, 4, 5} //直接创建并初始化

fmt.Println(mySlice1)

fmt.Println(mySlice2)

fmt.Println(mySlice3)

fmt.Println("myAarray: ")

for _, v := range myArray {

fmt.Print(v, " ")

}

fmt.Println("\nmySlice: ")

for _, v := range mySlice {

fmt.Print(v, " ")

}

fmt.Println()

 

// 动态增减元素

// 数组切片支持go内置的cap():返回切片分配的空间大小,和len(): 返回当前所存储的元素个数

 

mySlice4 := make([]int, 5, 10)

fmt.Println("len of slice:", len(mySlice4))

fmt.Println("len of slice:", cap(mySlice4))

 

mySlice4 = append(mySlice4, 1, 2, 3)

fmt.Println("len of slice:", len(mySlice4))

fmt.Println("len of slice:", cap(mySlice4))

 

mySlice4 = append(mySlice4, 1, 2, 3) //元算个数超出预留空间的时候,会自动扩容

fmt.Println("len of slice:", len(mySlice4))

fmt.Println("len of slice:", cap(mySlice4))

 

// 内容复制

// 数组切片支持Go语言的内置函数copy(), 按照较小的数组切片的元素个数进行复制

mySlice5 := []int{1, 2, 3, 4, 5}

mySlice6 := []int{5, 4, 3}

copy(mySlice6, mySlice5) //copy(to, from), 复制mySlice5的前3个元素到mySlice6

fmt.Println(mySlice6)

fmt.Println(mySlice5)

// [1 2 3]

// [1 2 3 4 5]

 

}

 

 

package main

 

import (

"fmt"

)

 

type PersonInfo struct {

ID      string

Name    string

Address string

 

func main() {

 

// var personDB map[string]PersonInfo

// personDB = make(map[string]PersonInfo)

personDB := make(map[string]PersonInfo)

 

// 添加

personDB["0"] = PersonInfo{"0", "Jack", "Room 201"}

personDB["1"] = PersonInfo{"1", "Tom", "Room 203"}

 

// 查找

// 不需要检查取到的值是否为nil, 只需查看第二个返回值ok

person, ok := personDB["1"]

if ok {

fmt.Println("Found Person", person.Name, "with ID 1")

// 使用Go内置函数delete可以删除map内的元素

delete(personDB, "1")

_, ok := personDB["1"]

if !ok {

fmt.Println("Person delete success!")

}

} else {

fmt.Println("Did not find person with ID 1")

}

} 

 

 

 

 

 

 

你可能感兴趣的:(Go,golang)