注意事项五
1)字符串遍历:按字节(使用byte)、按字符(使用rune)
2)strings包的字符串处理函数
---------------------------------------------------------------检索字符串-----------------------------------------------------
func Contains(s, substr string) bool--判断s是否包含substr func ContainsAny(sm chars string) bool--判断s是否包含chars中的任一字符
func HasPrefix(s,prefix string) bool--判断s是否有前缀字符串prefix func HasSuffix(s,suffix string) bool--判断s是否有后缀字符串suffix
func ContainsRune(s string, r rune) bool--判断s是否包含unicode码值r----rune 类型等价于 int32 类型
func Count(s,sep string) int--返回s包含sep的个数 func IndexRune(s string, r rune) int---返回unicode码值r在s中首次出现的位置
func Index(s,sep string) int--返回s中sep首次出现的位置----LastIndex---最后一次
func IndexAny(s, chars string) int--chars中任一unicode码值在s中首次出现的位置---LastIndexAny---最后一次
func IndexByte(s string, c byte) int--s中字符c首次出现的位置---LastIndexByte---最后一次
func IndexFunc(s string, f func(rune) bool) int--s中满足函数f(r)==true字符首次出现的位置---LastIndexFunc---最后一次
---------------------------------------------------------------分割字符串-----------------------------------------------------
func Fields(s string) []string--s以空白字符分割,返回切片 func FieldsFunc(s string, f func(rune) bool) []string--s以满足f(r)==true的字符分割,返回切片
func Split(s, sep string) []string--s以sep作为分隔符分割,分割后字符最后去掉sep-----func SplitN(s, sep string, n int) []string---n决定返回的切片数
func SplitAfter(s, sep string) []string--s以sep作为分隔符分割,分割后字符最后附上sep---func SplitAfterN(s, sep string, n int) []string---n决定返回的切片数
---------------------------------------------------------------大小写转换-----------------------------------------------------
func 函数(s string) string//Title---首字母大写 ToLower---转换成小写 ToTitle&&ToUpper---转换成大写
注意:(多数情况下 ToUpper 与 ToTitle 返回值相同,但在处理某些unicode编码字符则不同)
func 函数(_case unicode.SpecialCase, s string) string//ToLowerSpecial---ToTitleSpecial---ToUpperSpecial(s中所有字符按_case指定的映射转换成小-大-大写)
---------------------------------------------------------------修剪字符串-----------------------------------------------------
func 函数(s string, cutset string) string//Trim---TrimLeft---TrimRight----将s(首尾||左边||右边)包含在cutset中的任一字符去掉后返回;
func 函数(s string, f func(rune) bool) string//TrimFunc---TrimLeftFunc---TrimRightFunc----将s(首尾||左边||右边)满足函数f(r)==true的字符去掉返回;
func TrimSpace(s string) string//将s首位空白去掉返回;
func TrimPrefix(s, prefix string) string//s中前缀字符串prefix去掉返回 func TrimSuffix(s, suffix string) string//s中后缀字符串suffix去掉返回;
---------------------------------------------------------------比较字符串-----------------------------------------------------
func Compare(a, b string) int//按字典顺序比较a和b字符串大小;
func EqualFold(s, t string) bool//判断s和t两个UTF-8字符串是否相等,忽略大小写;
func Repeat(s string, count int) string//将字符串s重复count次返回;
func Replace(s, old,new string, n int) string//将s中的old字符替换为new并返回,n<0时替换所有old字符串;
func Join(a []string,sep string) string//将s中所有字符连接成一个字符串,使用sep作为分隔符;
3)time包的实例
package main
import (
"fmt"
"time"
)
func main() {
testTime()
}
func testTime(){
t:=time.Now()
fmt.Println("1.----",t)//获取当前本地时间
fmt.Println("2.----",t.Local())//转换成本地时区
fmt.Println("3.----",t.UTC())//转成零时区
fmt.Println("------------------------------------------------------")
t=time.Date(1997,time.January,1,12,12,12,0,time.Local)//根据指定数值返回时间---年-月-日-时-分-秒-纳秒-time.Local(当地时间)||time.UTC(世界统一时间)
fmt.Printf("4.----本地时间:%s 国际时间:%s\n",t,t.UTC())
fmt.Println("------------------------------------------------------")
t,_=time.Parse("2006-01-02 15:04:05","2020-06-23 05:47:13")//将一个格式化的时间字符串解析成所代表的时间,layout表示参考时间格式,第二个返回值是出错信息
fmt.Println("5.----",t)
fmt.Println("------------------------------------------------------")
fmt.Println("6.----",time.Now().Format("2006-01-02 15:04:02"))//根据指定格式返回时间点的格式化文本
fmt.Println("7.----",time.Now().String())//时间格式化为字符串
fmt.Println("------------------------------------------------------")
fmt.Println("8.----",time.Now().Unix())//计算1970-1-1到指定时间的秒数
fmt.Println("9.----",time.Now().UnixNano())//计算1970-1-1到指定时间的纳秒数
fmt.Println("------------------------------------------------------")
fmt.Println("10.----",t.Equal(time.Now()))//t.Equal(u)判断t和u两个时间是否相同,考虑时区影响
fmt.Println("11.----",t.Before(time.Now()))//t.Before(u)判断t是否在u之前
fmt.Println("12.----",t.After(time.Now()))//t.After(u)判断t是否在u之后
fmt.Println("------------------------------------------------------")
y,m,d:=time.Now().Date()//返回时间点对应的年月日
fmt.Println("13.----",y,m,d)
fmt.Println("14.----",time.Now().Year())
fmt.Println("15.----",time.Now().Month())
fmt.Println("16.----",time.Now().Day())
fmt.Println("17.----",time.Now().Weekday())//返回星期几
fmt.Println("------------------------------------------------------")
hour,minute,second:=time.Now().Clock()//返回时间点对应的时分秒
fmt.Println("18.----",hour,minute,second)
fmt.Println("19.----",time.Now().Hour())
fmt.Println("20.----",time.Now().Minute())
fmt.Println("21.----",time.Now().Second())
fmt.Println("22.----",time.Now().Nanosecond())//返回那一秒内的纳秒偏移量
fmt.Println("------------------------------------------------------")
fmt.Println("23.----",time.Now().Sub(time.Now()))//t.Sub(u)返回一个时间段t-u
fmt.Println("24.----",time.Now().Sub(time.Now()).Hours())//将时间段表示为float64类型的小时数
fmt.Println("25.----",time.Now().Sub(time.Now()).Minutes())//float64类型的分钟数
fmt.Println("26.----",time.Now().Sub(time.Now()).Seconds())//float64类型的秒数
fmt.Println("27.----",time.Now().Sub(time.Now()).Nanoseconds())//int64类型的纳秒数
fmt.Println("28.----","时间间距:",t.Sub(time.Now()).String())//返回时间段用字符串表示
fmt.Println("------------------------------------------------------")
w,_:=time.ParseDuration("1h30m")//解析一个时间段字符串,包含可选的正负号、十进制数、可选的小数和单位后缀,合法单位-ns、us、ms、s、m、h
fmt.Println("29.----",w)
fmt.Println("30.----","结束时间:",time.Now().Add(w))//t.Add(w)返回时间点t+w
fmt.Println("31.----","一年一个月零一天后的日期:",time.Now().AddDate(1,1,1))//返回增加的年、月、日
fmt.Println("------------------------------------------------------")
}
4)math包的实例
package main
import (
"fmt"
"math"
)
func main() {
//下面除了第一个是bool外,其余全是float64
fmt.Println(math.IsNaN(3.1415926))//判断f是否Not A Number
fmt.Println(math.Ceil(3.00001))//返回不小于x的最小整数(向上取整)
fmt.Println(math.Floor(3.00001))//返回不大于x的最小整数(向下取整)
fmt.Println(math.Trunc(3.0001))//返回整数部分
fmt.Println(math.Abs(-3.00001))//返回绝对值
fmt.Println("--------------------------")
fmt.Println(math.Max(2,3))//返回二者中的最大值
fmt.Println(math.Min(2,3))//返回二者中的最小值
fmt.Println(math.Dim(13,4))//返回x-y和0二者中的较大值
fmt.Println("--------------------------")
fmt.Println(math.Mod(11,3))//取余操作 x%y
fmt.Println(math.Sqrt(9))//返回二次方根
fmt.Println(math.Cbrt(8))//返回三次方根
fmt.Println(math.Hypot(3,4))//求直角三角形的斜边 sqrt(p^2+q^2)
fmt.Println(math.Pow(2,3))//返回x^y
fmt.Println("--------------------------")
//正弦sin 余弦cos 正切tan
//对数log log2 log10
}
5)math/rand—伪随机数生成器—整型||浮点型----need种子;
seed()函数生成不确定的种子—这样随机数生成器每次生成不同的序列;默认为seed(1);
package main
import (
"fmt"
"math/rand"
"time"
)
func main() {
x1:=rand.Int()//返回一个非负的伪随机数
fmt.Println(x1)
x2:=rand.Intn(1000)//返回在[0,n]范围内的伪随机数
fmt.Println(x2)
x3:=rand.Float64()//返回[0.0,1.0]范围内的float64值
fmt.Println(x3)
//上面这三种方式生成的随机数是固定的---每次运行产生的数一样
//动态随机数种子生成随机资源,产生随机对象获取随机数
s1:=rand.NewSource(time.Now().UnixNano())//NewSource是使用给定的种子创建一个伪随机资源
r1:=rand.New(s1)//使用s1产生的随机数来生成其他各种分布的随机数值
x4:=r1.Intn(1000)
fmt.Println(x4)
//简写方式---动态变化随机数种子来获取随机数
rand.Seed(time.Now().UnixNano())//使用给定的seed来初始化生成器到一个确定的状态
x5:=rand.Intn(20)
fmt.Println(x5)
//生成[m,n]范围内的整型随机数
rand.Seed(time.Now().UnixNano())
x6:=rand.Intn(10-1+1)+1//rand.Intn(n-m+1)+m eg:[1,10]
fmt.Println(x6)
}
6)从键盘上输入数据—fmt.Scanln(&变量1, &变量2)