基础语法·上(golang笔记第一期)
p.s.这是萌新自己自学总结的笔记如果想学习得更透彻的话还是请去看大佬的讲解目录hello golang变量与常量声明函数返回值import与init指针defer数组maphello golangpackagemain// 声明 main 包importfmt// 导入 fmt 包用于输入输出importtime// 导入 time 包用于获取当前时间funcmain(){// { 必须与函数名在同一行// 输出 Hello World!fmt.Println(Hello World!)// 格式化输出name:张三age:13;//分号可加可不加time.Sleep(2*time.Second)// 暂停 2 秒钟// 格式化输出fmt.Printf(你好我叫 %s,今年 %d 岁\n,name,age)}变量与常量声明packagemainimportfmtfuncmain(){varnumint1145varstrstringHello, World!//可省去类型编译器会自动推断varnum22024//最简形式 ://注意: : 只能在函数内部使用不能在函数外部即全局变量使用str2:Go is awesome!num3:2024fmt.Println(num)fmt.Println(num2)fmt.Println(num3)//注意:go不允许没使用的变量存在否则会编译错误fmt.Println(str)fmt.Println(文本:,str2)//多变量声明vara,bkskbl,zdjdfmt.Println(a)fmt.Println(b)// 正确写法只声明变量代码写在 var() 外面var(c多变量声明// ✅ 用 而不是 :d2024)// 然后使用它们fmt.Println(c)fmt.Println(d)}packagemainimportfmt// 枚举const(//可以使用iota来自动生成枚举值iota在每个const块中从0开始递增,当然也可以对iota进行加减乘除等运算来生成不同的值//iota只能配合const()使用不能单独使用SICHUANiota// SICHUAN的值为0CHONGQING// CHONGQING的值为1BEIJING// BEIJING的值为2SHANGHAI// SHANGHAI的值为3)funcmain(){constnamestringWorld//常量fmt.Printf(Hello, %s!\n,name)}函数返回值packagemainimportfmtfuncmain(){fmt.Println(2 3 ,add1(2,3))a,b:add2(2,3)fmt.Println(2 3 ,a)fmt.Println(2 - 3 ,b)a1,a2:add3(2,3)fmt.Println(2 3 ,a1)fmt.Println(2 - 3 ,a2)}//返回单个值funcadd1(xint,yint)int{returnxy}//返回多个值(返回值匿名)funcadd2(xint,yint)(int,int){returnxy,x-y}//返回多个值(返回值命名 有默认值)funcadd3(xint,yint)(a1int,a2int){a1xy a2x-yreturn}import与initpackagelib1importfmtfuncinit(){fmt.Println(lib1 init)}funcLib1Test(){fmt.Println(lib1 test)}---------------------------------------------------------------packagemainimportfmtimportgolang/src/lib/lib1import{_lib1myliblib1//别名导包}funcmain(){lib1.Lib1Test()}import _ “fmt”给fmt包起一个别名匿名无法使用当前包的方法但是会执行当前的包内部的init()方法import aa “fmt”给fmt包起一个别名aaaa.Println()来直接调用。import . “fmt”将当前fmt包中的全部方法导入到当前本包的作用中fmt包中的全部的方法可以直接使用API来调用不需要fmt.API来调用指针packagemainimportfmtfuncchangeValue(p*int){*p10}funcmain(){varaint1changeValue(a)fmt.Println(a ,a)}deferpackagemainimportfmtfuncmain(){//写入defer关键字deferfmt.Println(main end)//defer关键字会将其后面跟随的函数进行延迟处理直到上层函数(即main函数)返回时才会执行被延迟的函数//defer本质为压栈与出栈//先执行return语句返回值被保存到内存中之后才会执行defer语句fmt.Println(main start)}数组静态数组packagemainimportfmtfuncmain(){//静态数组(固定长度)vararr[5]intfori:0;ilen(arr);i{arr[i]i1fmt.Println(arr[i])}arr2:[10]int{1,2,3,4,5}forindex,value:rangearr2{fmt.Printf(index: %d, value: %d\n,index,value)}//查看数据类型fmt.Printf(arr type: %T\n,arr)fmt.Printf(arr2 type: %T\n,arr2)//静态数组函数传参必须保证长度一致并且还是值拷贝//这时可以用动态数组即切片}动态数组、切片packagemainimportfmtfuncprintArray(myArray[]int){//引用传递// _ 表示匿名的变量for_,value:rangemyArray{fmt.Println(value ,value)}myArray[0]100}funcmain(){myArray:[]int{1,2,3,4}// 动态数组, 切片 slicefmt.Printf(myArray type is %T\n,myArray)printArray(myArray)}---------------------------------------------------------------------packagemainimportfmtfuncmain(){slice:[]int{1,2,3}fmt.Println(len(slice))//开辟五个空间,默认值为0varslice1make([]int,5)slice1[0]1fmt.Println(slice1)-----------------------------------------------------packagemainimportfmtfuncmain(){// 创建一个长度为3容量为5的切片vararrmake([]int,3,4)fmt.Printf(len%d cap%d arr%v\n,len(arr),cap(arr),arr)//追加元素arrappend(arr,1)fmt.Printf(len%d cap%d arr%v\n,len(arr),cap(arr),arr)// 再添加一个元素容量会自动扩容,通常是两倍}}---------------------------------------------------------------------packagemainimportfmtfuncmain(){s:[]int{1,2,3}//len3, cap3s1:s[0:2]//前闭后开区间fmt.Println(s1)s1[0]100fmt.Println(s)fmt.Println(s1)s2:make([]int,6)copy(s2,s)fmt.Println(s2)}mappackagemainimportfmtfuncmain(){varmyMap1map[string]stringifmyMap1nil{fmt.Println(myMap1 是一个空map)}//在使用map前 需要先用make给map分配数据空间myMap1make(map[string]string,10)myMap1[one]1myMap1[two]2myMap1[three]3fmt.Println(myMap1)// 第二种声明方式myMap2:make(map[int]string)myMap2[1]111myMap2[2]222myMap2[3]333fmt.Println(myMap2)// 第三种声明方式myMap3:map[string]string{one:php,two:c,three:python,}}packagemainimportfmtfuncmain(){cityMap:make(map[string]string)//添加cityMap[NY]New YorkcityMap[LA]Los AngelescityMap[CHI]Chicago//遍历forkey,value:rangecityMap{fmt.Printf(Key: %s, Value: %s\n,key,value)}//删除delete(cityMap,LA)//修改cityMap[NY]NYC//再次遍历forkey,value:rangecityMap{fmt.Printf(Key: %s, Value: %s\n,key,value)}}