目录
数组
数组的定义
package main
import "fmt"
const arrLength=5
func ShowArr(arr [arrLength]int) {
for i,x := range arr {
fmt.Println(i, x)
}
}
func main() {
var a[arrLength] int;
for index := 0; index < arrLength; index++{
a[index]=index;
}
ShowArr(a)
var b = [...]int{0,1,2,3,4}
ShowArr(b)
}
二维数组
package main
import "fmt"
func main() {
var array[2][2] int;
array[0][0] = 0
array[0][1] = 1
array[1][0] = 2
array[1][1] = 3
for index_i := 0; index_i < 2; index_i++{
for index_j := 0; index_j < 2; index_j++{
fmt.Println(array[index_i][index_j])
}
}
}
多维数组
package main
import "fmt"
func main() {
var array[2][2][2] int;
array[0][0][0] = 0
array[0][0][1] = 1
array[0][1][0] = 2
array[0][1][1] = 3
array[1][0][0] = 4
array[1][0][1] = 5
array[1][1][0] = 6
array[1][1][1] = 7
for index_i := 0; index_i < 2; index_i++{
for index_j := 0; index_j < 2; index_j++{
for index_k := 0; index_k < 2; index_k++ {
fmt.Println(array[index_i][index_j][index_k])
}
}
}
}
数组作为函数的参数
package main
import "fmt"
func ShowArr(arr []int) {
for i,x := range arr {
fmt.Println(i, x)
}
}
func main() {
var array = []int{1, 2, 3, 4}
ShowArr(array)
var array2 [4]int
for index := 0; index < 4; index++{
a[index]=index;
}
ShowArr(array2)
}
指针
指针的简单实用
package main
import "fmt"
func main() {
var p *int
age:=21
p = &age
fmt.Println(*p)
fmt.Println(p)
var pNil *int
fmt.Println(pNil)
}
指针数组
package main
import "fmt"
func main() {
var prtArr [3]*int
a:=10
b:=11
c:=12
prtArr[0]=&a
prtArr[1]=&b
prtArr[2]=&c
fmt.Println(prtArr[0], prtArr[1], prtArr[2])
fmt.Println(*prtArr[0], *prtArr[1], *prtArr[2])
}
指向指针的指针
package main
import "fmt"
func main() {
a:=10
var p *int
p = &a
fmt.Println(*p)
var pp **int
pp = &p
fmt.Println(**pp)
}
传递指针到函数
通过给函数传入指针,可以修改对应地址变量的值
package main
import "fmt"
func swap(a *int, b *int) {
var tmp int
tmp = *a
*a = *b
*b = tmp
}
func main() {
a:=10
b:=99
fmt.Println(a, b)
swap(&a, &b)
fmt.Println(a, b)
}
结构体
结构体的简单实用
package main
import "fmt"
type MyStruct struct{
age int
name string
id int
}
func ShowStruct(myStruct MyStruct){
fmt.Println(myStruct.id, myStruct.name, myStruct.age)
}
func main() {
var myStruct MyStruct
myStruct.age = 21
myStruct.name = "zeng"
myStruct.id = 11
ShowStruct(myStruct)
}
结构体指针
package main
import "fmt"
type MyStruct struct{
age int
name string
id int
}
func ShowStruct(myStruct MyStruct){
fmt.Println(myStruct.id, myStruct.name, myStruct.age)
}
func main() {
var myStruct MyStruct
myStruct.age = 21
myStruct.name = "zeng"
myStruct.id = 11
var pMyStruct *MyStruct
pMyStruct = &myStruct
ShowStruct(*pMyStruct)
}
切片
跟Python的切片其实差不多,都是可以看成数组的升级版
定义切片
package main
import "fmt"
func main() {
s:=[]int {1, 2, 3}
a:=s[:2]
b:=make([]int, 2)
b[0]=1
b[1]=2
fmt.Println(b[0], b[1])
for index:=0; index<2; index++ {
fmt.Println(a[index])
}
}
len和cap函数
package main
import "fmt"
func main() {
a:=make([]int, 2, 5)
c:=a[:5]
fmt.Println(c)
fmt.Println("len:%d cap=%d slice=%v\r\n", len(a), cap(a), a)
}
空切片
package main
import "fmt"
func main() {
var number []int
if (number == nil) {
fmt.Println("空切片")
}
}
切片截取
package main
import "fmt"
func main() {
number := []int{0, 1, 2, 3, 4}
fmt.Println(number[0:4])
fmt.Println(number[:4])
fmt.Println(number[2:4])
}
append和copy函数
package main
import "fmt"
func main() {
number := []int{0, 1, 2, 3, 4}
number = append(number, 5)
fmt.Println(number)
number = append(number, 6, 7, 8)
fmt.Println(number)
number1 := make([]int, len(number), (cap(number))*2)
copy(number1, number)
fmt.Println(number1, len(number1))
}
多维切片
使用到的时候在查看,其实就是切分多维数组
更多方法请参考
http://www.runoob.com/go/go-slice.html