直接贴代码了~ 不解释,语法很好理解,大赞~ 喜欢go
/** Go语言基础: 关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var **/ package main //导入多个包 import ( "errors" "fmt" ) //定义多个常量 const ( SITE = "qq.com" NAME = "QQ" SITEAGE = 23 ) //批量定义全局变量 var ( pname string page int8 = 25 pisdel = false ) //定义变量 var name string var a1, a2, a3 string var age uint8 = 24 var b1, b2, b3 uint8 = 1, 2, 3 var c1, c2, c3 = 22, "test", false //编译器会根据值的类型初始化 //常量 const SiteUrl = "www.baidu.com" const Pi float32 = 3.1415926 const tablePrefix = "wish_" // func main() { // //testStart() // // testString() // //testErrors() // //testConst() // // testArr() // testMap() // } func testStart() { //函数内定义并赋值变量,_丢弃对应的值 v1, v2, _ := 21, "chris", true fmt.Println(v1, v2) //go语言支持int和uint,其中uint是无符号 //int8 int16 int32(rune) int64和 uint8(byte) uint16 uint32 uint64 //数值类型的不同长度变量之间不允许相互赋值或操作,会报错 // var a int8 = 23 // var b int32 = 345 // var c int32 // c := a + b //浮点型 var f1 float32 = 23.234 var f2 float64 = 128.02123 fmt.Println(f1, f2) //复数 默认 complex128(64位实数,64位虚数) //复数形式RE+IMi RE实数部分,IM虚数部分 i虚数单位 var c complex64 = 5 + 5i fmt.Printf("c complex is:%v", c) //c complex is:(5+5i) } /** 测试字符串类型 **/ var msg string //声明字符串一般方法 var emptyMsg string = "" //声明一个空字符串 func testString() { s1, s2, s3 := "no", "yes", "maybe" //简短声明多个字符串变量 sayhello := "hello chris" msg = "你好世界" //修改英文字符串 message := []byte(sayhello) message[0] = 'H' msgValue := string(message) fmt.Println("\n", s1, s2, s3, sayhello, msg, msgValue) //连接字符串 fmt.Println(s3 + sayhello) /** 利用切片替换字符串 **/ //修改字符串可以利用字符串切片做 fmt.Println(sayhello[:5] + "贸") //中文修改 cnStr := "北京欢迎你!" r := []rune(cnStr) fmt.Println(string(r[:4]) + "您" + string(r[5:])) //声明多行字符串 more := `开头: 中间 结尾` fmt.Println(more) } func testErrors() { err := errors.New("\nemail:你的邮箱错误!") if err != nil { fmt.Println(err) } } /** 1byte 比特 8bit 1个int = int32 = float32 = 4byte str := [5]byte{'h','e','l','l','o'} 即 5byte nums := [3]int{1,2,3} 即 12byte */ /** iota 只能在常量中使用 以下静态变量输出:false 1 2 3 111 5 6 0 0 iota用来声明枚举变量时使用 默认值是0,每次调用一次 iota就自动加1,被定义的常量也会被计算在枚举内。理论上A0是0,所以A1才是1 只有枚举常量在一个 ()中才会累加。不在其中的则被重新计数为0 **/ const ( A0 = false A1 = iota // A1=0 A2 //A2 =1 A3 //A3 = 2 A4 = 111 A5 = iota A6 ) const A7 = iota const A8 = iota func testConst() { fmt.Println(A0, A1, A2, A3, A4, A5, A6, A7, A8) } ///////////////////////常量枚举结束 ///////////////////////数组 var arr [6]int8 func testArr() { array := [...]int8{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} //根据元素个数计算长度,进行初始化 doubleArr := [2][3]int8{{1, 2, 3}, {3, 4, 5}} //声明多维数组 arr[0] = 22 arr[1] = 33 //slice引用类型实现“动态数组”,当数据源被修改,则引用该数据源的slice也会被修改。即引用的是内存指针 //slice默认开始位置为0 var slice1, slice2 []int8 slice1 = array[2:4] //从key=2开始,到第4个元素结束 slice2 = array[3:6] fmt.Println(arr[1], arr[5], doubleArr) //最后一个元素无赋值,默认为0 fmt.Println(array, slice1, slice2) // array[3] = 100 fmt.Println(array, slice1, slice2) //slice内置函数 len获取长度 cap 最大容量 append追加并返回一个新slice copy函数 fmt.Println(len(slice2), cap(slice2), append(slice2, 20)) fmt.Println(slice1, append(slice1, 22)) //[3 4] [3 4 22] array[3] = 99 fmt.Println(slice1, append(slice1, 22)) //[3 99] [3 99 22] } //////////////////Map /** 格式: map[keyType]valueType **/ var members map[string]int8 //声明一个key为字符串,值为int8的字典;此方式声明后使用前用make初始化 func main() { testMap() } func testMap() { members := make(map[string]int8) //必须先make初始化 members["one"] = 1 members["ten"] = 10 members["age"] = 24 members["one"] = 22 fmt.Println(members, members["age"]) fmt.Println(members, len(members)) /** 1、map是无序的,每次打印出来map都不一样。必须用key获取值 2、map长度是不固定的,和slice一样是一种引用类型 3、len同样适用于map,返回map的元素个数 4、方便修改 **/ //另一种map初始化 maps := map[string]float32{"A": 2.2, "B": 2.3, "C": 10} //判断map中某个key是否存在,并返回值 value, res := maps["C"] if res { fmt.Println("key : C++ ; value : ", value) } else { fmt.Println("key C++ not find! res:", res) } maps1 := maps fmt.Println(maps, maps1) //map[A:2.2 B:2.3 C:10] map[A:2.2 B:2.3 C:10] delete(maps, "C") //删除A为key的数据 fmt.Println(maps, maps1) //map[A:2.2 B:2.3] map[A:2.2 B:2.3] //注:因为map是引用类型,当map源修改时,一个改变另一个也随之改变 } ///////make new /** make用于内建类型(slice, map 、channel)的内存分配。 new用于各种类型的内存分配。返回的是指针,指向新分配类型的零值 make和new的区别:make只能创建slice、map、channel类型,并且返回的是一个有初始值(非零)的类型,不是指针。 例如:slice是一个包含指向数据(内部array)的指针、长度和容量的三项描述符。在slice初始化之前slice是nil。 对于slice、map和channel来说,make初始化了内部的数据结构,填充了适当的值。所以make返回初始化后的(非零)值 零值: 并非是空值,而是变量未填充之前的默认值。通常为0。例如: 类型 零值 int 0 int8 0 int32 0 int64 0 uint 0x0 rune 0//是int32 byte 0x0//实际类型是uint8 float32 0//长度4byte float64 0//长度8byte bool false string "" **/