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)
}

 

posted on 2015-10-27 23:06  mynetstudy  阅读(140)  评论(0编辑  收藏  举报