package main import ( "fmt" "strconv" // _ "net" // _ "os" // "time" ) //var now = time.Now() const ( CD_TIME = 1000 MAX_NUM = 20 ) var ( a int = 12 b int = 234 ) /** * [main description] * @return {[type]} [description] */ func main() { //case if 应用 a := []int{1, 2, 3, 4, 5} var b = []int{7, 8, 9} fmt.Println(a) fmt.Println(b) //设置数组值 c := make([]int, 3) c[2] = 999 fmt.Println(c) d := new([]int) fmt.Println(d) StringInfo() //CaseIf() // //数组相关 //ArrFunc() } /** * 字符串相关 */ func StringInfo() { //使用``中间的字符原样输出,支持换行 var str string = `asdfalsdfjalsfj\asfdasdfas asdfas asdfas fasdf asf((&$&()_+^%!@#$%^*()_+#$%^&*()_)) asdff\asdf` fmt.Println(str) fmt.Println("=====================================\n") //字符串链接用+,如果有换行必须在上一行的末尾,否则编译错误 str2 := "hello" + "world" fmt.Println(str2) fmt.Println(str + str2) //截取字符串--通过[:]这种方式获取字符串其中的一部分 fmt.Println(str2[:5]) fmt.Println(str2[3:8]) //下标必须在字符串下标的上下限范围内 fmt.Println(str2[5:]) str2 = "1234567890" fmt.Println(str2) //修改字符串其中的一部分 //str2[2] = "2"//直接这样是不可以修改的 fmt.Println(str2) fmt.Println("=====================================\n") //如果要修改字符串中的其中某个字符,需要将字符串转换成[]rune(使用的Utf8编码一个汉字可以用一个小标取出)或者[]byte //但是这些转换都是需要重现分配内存的,并且复制字节数组,修改完在转换成string即可 //rune uniocode 编码 zw := "你好" us := []rune(zw) fmt.Println(zw) //输出为:你好 fmt.Println(us) //输出为:[20320 22909] us[1] = '坏' //通过小标修改中文字符串 fmt.Println(us) //输出为:[20320 22351] 字符已被修改 fmt.Println(string(us)) //输出为:你坏 //us[2] = '透'//尝试追加字符串是错误的,不可以这么操作 fmt.Println(string(us)) fmt.Println("=====================================\n") /** *循环字符串,中英文的 */ strzf := "abcd是英文字母,1234是数字" for i := 0; i < len(strzf); i++ { fmt.Printf("%c|", strzf[i]) } //输出为:a|b|c|d|æ||¯|è||±|æ|||å|||æ|¯||,|1|2|3|4|æ||¯|æ| fmt.Println("=====================================\n") for _, r := range strzf { fmt.Printf("%c|", r) } //输出为:a|b|c|d|是|英|文|字|母|,|1|2|3|4|是|数|字| } /** * 判断语法函数 */ func CaseIf() { fmt.Println(a) fmt.Println(b) var c int = 123456789 d := string(c) fmt.Println(d) fmt.Println(CD_TIME + MAX_NUM) fmt.Println(MAX_NUM) fmt.Println("====================\n") var i int = 3 for { i++ if i > 10 { break } fmt.Println(i) } /** * switch score 中的变量尅不要,加在后面的 case之后, * 但是如果存在这个变量,case 后面就不可可以在加条件,只能是常量 * switch 不用显示调用break终止,匹配到以后会自动终止掉 * 如果不想匹配到后终止要继续执行需要调用fallthrough * 如果 写成 switch score:=1 这种 score变量只在switch体内有效 */ fmt.Println("=========over===========\n") var score int = 5 switch { case score > 1: fmt.Println("a>1") fallthrough case score > 5: fmt.Println("a>5") fallthrough case score > 8: fmt.Println("a>8") fallthrough default: fmt.Println("无基准条件") } fmt.Println("=======================\n") switch score { case 1: fmt.Println("a>1") case 5: fmt.Println("a>5") case 8: fmt.Println("a>8") default: fmt.Println("无基准条件") } fmt.Println("==========================================\n") /** * continue,break 终端的标签必须在调用的代码之前 * goto 调用的代码必须在调用之后,否则死循环标签和go代码位置那段代码了 * goto 为调整程序执行到指定位置 * @type {[type]} */ BREAK_NOTICE_1: for j := 0; j < 10; j++ { if j > 3 { continue } for m := j; m < 10; m++ { if m > 5 && j > 5 { break BREAK_NOTICE_1 } else { fmt.Println("循环:" + strconv.Itoa(j) + "=" + strconv.Itoa(m)) } } } } func ArrFunc() { /** *数组 *定义的格式 var <var_name> = [length] <type> <value> * */ var arr = [3]int{0: 12, 1: 13, 2: 15} var arr2 = [...]int{1, 2, 3} fmt.Println(arr) fmt.Println(arr2) //数组指针-和数组的区别是前面有个区地址符号 var arrp *[3]int = &arr fmt.Println(arrp) //指针数组的指针 x1, y1 := 1, 2 var xypoint = [...]*int{&x1, &y1} fmt.Println(xypoint) //用new创建的数组也是返回的指向数组指针 arr3 := new([10]int) //可以通过数组指针或者数组变量加[]键对数组指定坐标赋值 arr3[2] = 1000 fmt.Println(arr3) fmt.Println("==========================================\n") //数组可以用==和!=但是不可以用其它操作符号,并且不同的长度数组是不可以比较的,长度是数组的一个属性(类似类型),所以不可以比较 var xyarr1 = [2]int{1, 2} var xyarr2 = [2]int{1, 1} fmt.Println(xyarr1 == xyarr2) fmt.Println(xyarr1 != xyarr2) //多维数组 arr4 := [2][2]int{{1, 1}, {2, 2}} fmt.Println(arr4) arr4[0][1] = 999 fmt.Println(arr4) }