package main
import (
"fmt"
"unicode"
)
func main() {
//运算符。算术运算符,逻辑运算符,位运算符, << >> | ^ & 。赋值运算符, ++,--(独立的语句,单独放一行) .= +=比较运算符, == != <=
//数组. var age [30]int 。数组包含元素的类型和数组的长度 。 值类型,
var name string
name = "理想"
fmt.Println(name)
var ages [30]int //声明了一个变量ages,他是[30]int类型
ages = [30]int{1, 2, 3, 15: 2}
var ages2 = [...]int{1, 2, 3, 4, 10, 18: 2341}
fmt.Println(ages, ages2)
//二维数组
var a1 [3][2]int
fmt.Println(a1) //[[0 0] [0 0] [0 0]]
a1 = [...][2]int{ //多维数组最外层可以加 ...
2: {1, 2},
1: {3, 4},
0: {5, 6},
}
fmt.Println(a1)
//go语言中的函数传递的都是值
//切片,三要素,指针,长度,容量 。切片不存值,它就像一个框,去底层数组框值
var s1 []int //没有分配内存,== nil
fmt.Println(s1 == nil)
s1 = []int{1, 2, 3}
fmt.Println(s1)
//copy函数
//make初始化,
s2 := make([]bool, 2, 4)
fmt.Println(s2)
s3 := make([]int, 0, 4)
fmt.Println(s3 == nil) //分配了内存,偏向底层的语言,要申请内存不需要释放内存
//切片的扩容策略: 1 <1024 *2 . 2 >1024, *1.25 3 如果申请的容量大于原来的2倍,就直接扩容至新申请的容量 4 具体存储的值类型不同,扩容策略也有一定的不同。
//append函数
var s4 []int //必须初始化后才能操作
//s4=make([]int,1)
//s4[0]=2345
s4 = append(s4, 11) //自动初始化切片
fmt.Println(s4)
//copy函数
var s5 = []int{1, 2, 3}
s6 := s5
//var s7 []int //nil
//var s7 = make([]int, 1, 3) //桶满了,装不下
var s7 = make([]int, 3)
copy(s7, s5)
fmt.Println(s6)
s6[1] = 100
fmt.Println(s6, s5, s7)
//指针
// &, *. go语言的指针只能读,不能修改,不能修改指针变量指向的地址的
addr := "沙河"
addrP := &addr
fmt.Println(addrP)
fmt.Printf("%T,,%v\n", addrP, *addrP)
//map
//存储的键值对的数据,也是需要申请内存的,引用类型
var m1 map[string]int
fmt.Println(m1 == nil)
m1 = make(map[string]int, 10)
m1["lixiang"] = 100
fmt.Println(m1, m1["jiwuming"]) //如果取不到,返回的是value对应类型的零值
score, ok := m1["jiwuming"]
if !ok {
fmt.Println("没有姬无命这个人")
} else {
fmt.Println("姬无命的分数是", score)
}
delete(m1, "lixiang") //删除的值不存在则什么都不干
fmt.Println(m1)
fmt.Println(m1 == nil) //已经开辟内存,不为nil
//判断字符串中汉字的数量,难点是判断一个字符是汉字。
prac1 := "hello沙河"
for _,c := range prac1{
if unicode.Is(unicode.Han,c)
}
}