数据结构

数组

支持多维数组,属于值类型,支持range遍历
例子:随机生成长度为10整数数组

package main
import (
	"fmt"
	"math/rand"
)
// 赋值 随机获取100以内的整数
func RandomArrays() {
	var array [10]int //声明
	var max int
	for i := 0; i < 10; i++ {
		array[i] = rand.Intn(100)
		if array[i] > max {
			max = array[i]
		}
	}
	fmt.Printf("数组内容:%v,长度为:%d, 最大值:%d\n", array, len(array), max) //获取数组长度len(array)
}

 Map

	// 创建map
	countryCapitalMap := make(map[string]string)

	// 增加Map元素(故意写错的,方便测试修改,中国人,非行走的五十万)
	countryCapitalMap["China"] = "Shanghai"
	countryCapitalMap["India"] = "New Delhi"
	countryCapitalMap["USA"] = "Washington D.C."

	// 查询Map元素
	capital, present := countryCapitalMap["China"]
	if present {
		fmt.Printf("中国的首都是 %s\n", capital)
	} else {
		fmt.Println("未找到国家")
	}

	// 修改Map元素
	countryCapitalMap["China"] = "Beijing"

	// 删除Map元素
	delete(countryCapitalMap, "India")

	// 遍历map
	for country, capital := range countryCapitalMap {
		fmt.Printf("国家: %s, 首都: %s\n", country, capital)
	}

指针

引用类型

var a  = 100
b:= &a  // 取地址 赋值给指针变量
c:= *b // 指针变量中指向地址的值
var d *int //定义字符指针
d = b
fmt.Println(a,b,c,*d) //100 0xc0000120d0 100 100
*b = 666
fmt.Println(a,b,c,*d) //666 0xc0000120d0 100 666
a = 999
fmt.Println(a,b,c,*d)  //999 0xc0000120d0 100 999

make 与 new, make 只能用于初始化slice,map,chan类型;new 可以用于任何类型,nil 代表空指针

var slice1 = make([]int,5)
var map1 = make(map[int]string)
var chan1 = make(chan int,3)
var x *int = new(int)
var y *int
var z * map[int]string = new(map[int]string)
fmt.Println(x==nil,y==nil,z==nil) //输出false,true,false

函数

函数支持多个返回值,支持闭包函数,函数参数支持函数类型,不定长参数用 ...,不支持函数重载

  • 返回多个值
交换X与Y的值,并返回
func Swap(x int , y int) (int, int){
    return  y, x
}
  • 函数参数实现回调函数
type FuncType func(x int, y int) int //声明函数类型

func Minus(x int, y int) int {
	return x - y
}
func CalFun(x int, y int, cal FuncType) int {
	return cal(x, y)
}
func main() {
	var result = CalFun(100, 200, func(x int, y int) int { //匿名回调函数
		return x + y
	})
	fmt.Println(result)
	fmt.Println(Minus(200, 100))
}
  • 递归函数实现N的阶乘
func Factorial(n int64) int64 {
    if n <= 1 {
        return 1
    }
    return n * Factorial(n-1)
}

函数选择题

func add(args ...int) int {
	sum := 0
	for _, arg := range args {
		sum += arg
	}
	return sum
}

下面对add函数调用错误的是:

判断哪个选择是错误的:

A:add(1, 2)

B:add(1, 3, 7)

C:add([]int{1, 2})

D:add([]int{1, 3, 7}...)

A与B是普遍的数据传值结构

C与D是切片的传值结构,但是add方法中的入参为:...int

所以需要通过「...」将切片打散

add([]int{1, 3, 7}...)可以打散为:add(1, 3, 7)

C选项是切片的方式,所以传输会异常

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部