go 切片练习

下列程序输出什么?

package main

import "fmt"

func main() {
    var sa = make([]string, 5, 10)
    for i := 0; i < 10; i++ {
        sa = append(sa, fmt.Sprintf("%v", i))
    }
    fmt.Println(sa)
    fmt.Printf("sa长度= %d sa 容量=%d \n", len(sa), cap(sa))
}

/*
[      0 1 2 3 4 5 6 7 8 9]
sa长度= 15 sa 容量=20
*/
/*
[       0 1 2 3 4 5 6 7 8 9]
sa长度= 15 sa 容量=20
*/
 
 
2. 使用golang标准包 “sort”对数组进行排序
 
package main

import (
    "fmt"
    "sort"
)

func sortTest() {
    a := [...]int{1, 5, 6, 3, 4, 9}
    sort.Ints(a[:])
    fmt.Println("a:", a)

    var b [5]string = [5]string{"ac", "ec", "be", "fa", "ii"}
    sort.Strings(b[:])
    fmt.Println("b:", b)

    var c [5]float64 = [5]float64{29.38, 22.32, 0.8, 99191.2}
    sort.Float64s(c[:])

    fmt.Println("c:", c)

}
func main() {
    sortTest()
}

 

3. 实现一个密码生成工 具,具持以下功能:
a) 用户可以通过-l指定生成密码的长度
b) 用户可以通过-t指定生成密码的字符集,比如

-t num生成全数字的密码

-t char 生成包含全英文字符的密码,

-t mix包含成数字和英文的密码,

-t advance 生成包含数字、英文以及特殊字符的密码

 

package main

import (
    "flag"
    "fmt"
    "math/rand"
)

var (
    length  int
    charset string
)

const (
    NumStr  = "0123456789"
    CharStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    SpecStr = "+=-@#~,.[]()!%^*$"
)

func parseCommand() {
    flag.IntVar(&length, "l", 16, "-l 生成密码的长度")
    flag.StringVar(&charset, "t", "num",
        `-t 制定密码生成的字符集, 
        num:只使用数字[0-9], 
        char:只使用英文字母[a-zA-Z], 
        mix: 使用数字和字母, 
        advance:使用数字、字母以及特殊字符`)
    flag.Parse()
}

func getPwd() string {
    var pwd []byte = make([]byte, length, length)
    var sourceStr string
    if charset == "num" {
        sourceStr = NumStr
    } else if charset == "char" {
        sourceStr = CharStr
    } else if charset == "mix" {
        sourceStr = fmt.Sprintf("%s%s", NumStr, CharStr)

    } else if charset == "advance" {
        sourceStr = fmt.Sprintf("%s%s%s", NumStr, CharStr, SpecStr)
    } else {
        sourceStr = NumStr
    }

    for i := 0; i < length; i++ {
        index := rand.Intn(len(sourceStr))
        pwd[i] = sourceStr[index]
    }
    fmt.Println(string(pwd))
    return string(pwd)
}

func main() {
    parseCommand()
    pwd := getPwd()
    fmt.Println(pwd)
}

 

 
posted @ 2019-01-26 22:54  A-a  阅读(200)  评论(0编辑  收藏  举报