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