- 获取命令行参数
- init函数
- 局部变量和全局变量
- 变量的内存和变量的地址
- 指针变量的使用
- new函数的使用
- 值传递
- 引用传递
- 随机数的使用
- 数组
- 切片
- map
- 结构体
- 可见性规则
package main
import (
. "fmt"
"math/rand"
"os"
"time"
)
func init() {
println("main包的init函数")
}
func demo1() {
list := os.Args
for i := range list {
Printf("list[%d] = %v\n", i, list[i])
}
}
func demo2() {
a := 1
{
a := 2
println("内部 a = ", a)
}
println("外部 a = ", a)
}
func demo3() {
a := 1
p := &a
Printf("a = %v, p = %v\n", a, p)
}
func demo4(a *int) (result *int) {
*a = 666
result = a
return
}
func demo5() {
p := new(int)
Printf("这里是new函数的使用,p.type = %T, p = %v\n", p, p)
}
func demo6(a int) {
println("这里是值传递,a = ", a)
}
func demo7(p *int) {
println("这里是引用传递,p = ", p)
}
func demo8() {
a := rand.Int()
b := rand.Intn(100)
c := rand.Intn(int(time.Now().UnixNano()))
Printf("生成的随机数为 a = %d,b = %d, c = %d", a, b, c)
}
func demo9() {
array := [5]int{1, 2, 3, 4, 5}
array1 := [5]int{1, 2}
array2 := [5]int{2: 2}
array3 := [5][2]int{1: {2, 4}}
Printf("这里是数组,array = %v,array1 = %v,array2 = %v, array3 = %v\n", array, array1, array2, array3)
Printf("这里是数组赋值比较,array == array1 %v\n", array == array1)
func(arr [5]int) {
Printf("这里是数组参数传递值拷贝,arr == array %v,&arr == &array %v\n", arr == array, &arr == &array)
}(array)
func(p *[5]int) {
Printf("这里是数组指针参数传递,p == &array %v, p = %v\n", p == &array, p)
}(&array)
array4 := func() (result [5]int) {
for i := 0; i < 5; i++ {
b := rand.Intn(100)
result[i] = b
}
return
}()
array5 := func(arr [5]int) (result [5]int) {
for i := 0; i < 5-1; i++ {
for j := 0; j < 5-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
}(array4)
Printf("这里是数组,array4 = %v,排序后,array5 = %v\n", array4, array5)
array6 := [...]int{1}
Printf("这里是数组,不定长数组array6 = %v,排序后,array6.type = %T\n", array6, array6)
array7 := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice := array7[0:4:5]
slice2 := array7[5:8]
slice3 := array7[5:]
slice4 := array7[:8]
slice5 := slice4[:9]
Printf("这里是切片,slicer = %v,slicer.type = %T,slicer2 = %v,slicer2.type = %T\n", slice, slice, slice2, slice2)
Printf("这里是切片,slicer3 = %v,slicer3.type = %T,slicer4 = %v,slicer4.type = %T\n", slice3, slice3, slice4, slice4)
Printf("这里是切片,slicer5 = %v,slicer5.type = %T\n", slice5, slice5)
var slice6 []int = append(slice5, -1, -2, -3)
Printf("这里是切片,slicer5追加后: slicer6 = %v,slicer6.type = %T\n", slice6, slice6)
func(s1 []int) {
oldCap := cap(s1)
for i := 0; i < 10; i++ {
if cap(s1) > oldCap {
Printf("这里是切片,cap(s1) = %v,oldCap = %v\n", cap(s1), oldCap)
oldCap = cap(s1)
}
s1 = append(s1, -1)
}
}(array7[:1:1])
}
func demo10() {
var map1 map[string]string
Printf("这里是map,map1 = %v, map1.type = %T, len(map) = %v\n", map1, map1, len(map1))
map1 = make(map[string]string)
map1 = make(map[string]string, 1)
map1["a"] = "map-a"
map1["b"] = "map-b"
Printf("这里是map,初始化后 map1 = %v, map1.type = %T, len(map) = %v\n", map1, map1, len(map1))
map1["a"] = "map-a-a"
Printf("这里是map,修改内容 map1 = %v, map1.type = %T, len(map) = %v\n", map1, map1, len(map1))
delete(map1, "a")
Printf("这里是map,删除内容 map1 = %v, map1.type = %T, len(map) = %v\n", map1, map1, len(map1))
for k, v := range map1 {
Printf("这里是map,遍历内容 map1[%v] = %v\n", k, v)
}
key := "a"
value, result := map1[key]
if result {
Printf("这里是map,判断元素Key存在: result = %v, map1[%v] = %v\n", result, key, value)
} else {
Printf("这里是map,判断元素Key存在: result = %v\n", result)
}
func(m1 map[string]string) {
m1["a"] = "m1-a"
Printf("这里是map,map做函数参数为引用传递: m1 = %v, map1 = %v\n", m1, map1)
}(map1)
}
func demo11() {
type Student struct {
Id int
Name string
Age int
Sex byte
}
var s1 = Student{1, "radish", 20, 'm'}
Printf("这里是结构体,顺序初始化: s1 = %v, s1.type = %T\n", s1, s1)
s2 := Student{Id: 1, Name: "radish"}
Printf("这里是结构体,指定成员初始化: s2 = %v, s2.type = %T\n", s2, s2)
var p1 *Student
p1 = &Student{1, "radish", 20, 'm'}
Printf("这里是结构体,结构体指针变量顺序初始化: p1 = %v, p1.type = %T\n", p1, p1)
p2 := &Student{Name: "redish"}
Printf("这里是结构体,结构体指针变量指定成员初始化: p2 = %v, p2.type = %T\n", p2, p2)
s1.Id = 2
s1.Name = "radish40"
Printf("这里是结构体,操作成员: s1 = %v, s1.type = %T\n", s1, s1)
p1 = new(Student)
p1.Id = 2
p1.Name = "radish40"
Printf("这里是结构体,通过指针操作成员: p1 = %v, p1.type = %T\n", p1, p1)
}
func main() {
var (
a = 10
p = &a
)
demo1()
demo2()
demo3()
demo4(p)
demo5()
demo6(a)
demo7(p)
demo8()
demo9()
demo10()
demo11()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!