常用函数

目录

数学
含义 PHP Golang
数学函数 - -
求绝对值 abs() math.Abs()
进一法取整 ceil() math.Ceil()
舍去法取整 floor() math.Floor()
浮点数取余 fmod() math.Mod()
返回数的n次方 pow() math.Pow()
浮点数四舍五入 pow() math.Round(10.5)
求平方根 sqrt() math.Sqrt()
求最大值 max() math.Max(x, y float64)
求最小值 min() math.Min(x, y float64)
更好的随机数 mt_rand() rand.Int()
随机数随机返回范围内的值 rand() -
获取圆周率值 pi() math.Pi (常量)
字符串md5编码 md5() fmt.Printf("%x",md5.Sum([]byte("These pretzels are making me thirsty.")))
字符串
含义 PHP Golang
字符串函数 - -
删除字符串两端的空格或其他预定义字符 trim() strings.Trim()
删除字符串右边的空格或其他预定义字符 rtrim() strings.TrimRight()
删除字符串左边的空格或其他预定义字符 ltrim() strings.TrimLeft()
把字符串填充为指定的长度 str_pad -
重复使用指定字符串 str_repeat strings.Repeat("na", 2)
把字符串分割到数组中 str_split
- explode() strings.Split("a,b,c", ",")
- implode() strings.Join([]string{"foo", "bar", "baz"}, ", ")
反转字符串 strrev()
按照指定长度对字符串进行折行处理 wordwrap()
随机地打乱字符串中所有字符 str_shuffle()
将字符串解析成变量 parse_str()
格式化数字 number_format() message.NewPrinter(language.English).Sprintf("%.2f", 123456789.99)
字符串转为小写 strtolower() strings.ToLower("Gopher")
字符串转为大写 strtoupper() strings.ToUpper("Gopher")
字符串首字母大写 ucfirst() -
字符串每个单词首字符转为大写 ucwords() strings.Title("loud noises")
字符串替换操作 str_replace strings.Replace("oink oink oink", "k", "ky", 2)
统计字符串长度 strlen() strings.Count("five", "")
并发与锁
含义 PHP Golang
高级并发 - -
等待组 - sync.WaitGroup
等待组 - WaitGroup.Add
等待组 - WaitGroup.Done
等待组 - WaitGroup.Wait
互斥锁 - sync.Mutex
互斥锁 - sync.Mutex
互斥锁 - Mutex.Lock
互斥锁 - Mutex.Unlock
未被阻塞的所有Goroutine,可以被 Multiplex 到多少个线程上运行 - runtime.GOMAXPROCS(10)
当前存在的goroutine数量 - runtime.NumGoroutine()
并发安全的结构体 - sync.Map()
读写锁 - sync.RWMutex()
数组
含义 PHP Golang
数组/切片 - -
- array() -
- array_push() append(slice, anotherSlice...), append(slice, elem1, elem2)
- count() len(slice)
- - cap(slice)
索引起始位0,[i,j) 以i索引开始,到j索引结束不包含j索引 - slice[i:j]
生成一个数组,用一个数组的值 作为键名,另一个数组值作为值 array_combine() -
创建并返回一个包含指定范围的元素的数组 range() -
创建一个由参数所带变量组成的数组 compact() -
把一个数组分割为新的数组块 array_fill() -
把两个或多个数组合并为一个数组 array_chunk() -
在数组中根据条件取出一段值,并返回 array_merge() -
在数组中根据条件取出一段值,并返回 array_slice() -
返回两个数组的差集数组 array_diff() -
返回两个或多个数组的交集数组 array_intersect() -
在数组中查找一个值,返回一个键 array_search() sort.SearchStrings(a []string, x string),sort.SearchInts(a, x)
把数组中一部分删除用其他值替代 array_splice() -
返回数组中所有值的总和 array_sum() -
在数组中搜索给定的值 in_array() -
判断某个数组中是否存在指定的 key array_key_exists() -
返回数组内部指针当前指向元素的键名 key() -
返回数组中的当前元素(单元) current() -
把指向当前元素的指针移动到下一个元素的位置,并返回当前元素的值 next() -
指向当前元素的指针移动到上一个元素的位置,并返回当前元素的值 prev() -
将数组内部指针指向最后一个元素,并返回该元素的值(如果成功) end() -
把数组的内部指针指向第一个元素,并返回这个元素的值 reset() -
用数组中的元素为一组变量赋值 list() -
删除数组中的第一个元素,并返回被删除元素的值 array_shift() -
在数组开头插入一个或多个元素 array_unshift() -
向数组最后压入一个或多个元素 array_push() -
取得(删除)数组中的最后一个元素 array_pop() -
将数组打乱,保留键名 shuffle() -
计算数组中的单元数目或对象中的属性个数 count() -
返回一个键值反转后的数组 array_flip() -
返回数组所有的键,组成一个数组 array_keys() -
返回数组中所有值,组成一个数组 array_values() -
返回一个元素顺序相反的数组键名和键值依然匹配 array_reverse() -
统计数组中所有的值出现的次数 array_count_values() -
从数组中随机抽取一个或多个元素,注意是键名 array_rand() -
返回数组中当前的键/值对并将数组指针向前移动一步 each() -
删除重复值,返回剩余数组 array_unique() -
排序
含义 PHP Golang
排序 - -
按升序对给定数组的值排序,不保留键名 sort() sort.Strings(s)
对数组逆向排序,不保留键名 rsort() -
对数组排序,保持索引关系 asort() -
对数组逆向排序,保持索引关系 arsort() -
按键名对数组排序 ksort() -
将数组按照键逆向排序 krsort() -
用自然顺序算法对数组中的元素排序 natsort() -
自然排序,不区分大小写 natcasesort() -
sort.Slice(people, func(i, j int) bool {
    return people[i].Age > people[j].Age
})
文件
含义 PHP Golang
文件路径 - -
返回路径中的目录部分 dirname() path.Dir()
返回路径中的文件名部分 basename() path.Base()
打开文件或者 URL fopen() f, err :=os.OpenFile()
关闭一个已打开的文件指针 fclose() f.Close
检查文件或目录是否存在 file_exists() -
打开文件或者 URL fopen() os.OpenFile()
关闭一个已打开的文件指针 fclose() (os.OpenFile())File.Close
检查文件或目录是否存在 file_exists() os.IsExist
取得文件大小 filesize() fileInfo, err = os.Stat("text.txt"); fileInfo.Size()
判断给定文件是否可读 is_readable() file, err := os.OpenFile("1.txt", os.O_RDONLY, 0666); os.IsPermission(err)
判断给定文件是否可写 is_writable() file, err := os.OpenFile("1.txt", os.O_WRONLY, 0666); os.IsPermission(err)
判断给定文件是否可执行 is_executable() -
获取文件的创建时间 filectime() os.Chtimes
获取文件的修改时间 filemtime() os.Chtimes
获取文件的上次访问时间 fileatime() os.Chtimes
获取文件大部分属性值 stat() os.Stat("text.txt")
写入文件 fwrite() (os.OpenFile())file.WriteString("xxx")
写入文件(同上) fputs() (同上)
读取文件 fread() (os.OpenFile())bufio.NewReader(file).ReadString('\n') //表示每读到\n就停止
检测文件指针是否到了文件结束的位置 feof() -
从文件指针中读取一行 fgets() (os.OpenFile())bufio.NewReader(file).ReadString('\n')
从文件指针中读取字符 fgetc() -
把整个文件读入一个数组中 file() -
输出一个文件 readfile() -
将整个文件读入一个字符串 file_get_contents() -
将一个字符串写入文件 file_put_contents() -
返回文件指针读/写的位置 ftell() -
在文件指针中定位 fseek() (os.OpenFile())File.Seek()
倒回文件指针的位置 rewind() -
轻便的执行文件锁定 flock() -
返回路径中的文件名部分 basename() path.Base()
返回路径中的目录部分 dirname() path.Dir("/a/b/c")
返回文件路径的信息 pathinfo() -
打开目录句柄 opendir() -
从目录句柄中读取条目 readdir() ioutil.ReadDir(myfolder)
关闭目录句柄 closedir() -
新建目录 mkdir() os.MkdirAll()
删除目录 rmdir() os.RemoveAll()
删除文件 unlink() os.Remove("text.txt") os.RemoveAll
拷贝文件 copy() io.Copy()
重命名一个文件或目录 rename() os.Rename()
判断文件是否是通过 HTTP POST上传的 is_uploaded_file() -
将上传的文件移动到新位置 move_uploaded_file() -
时间
含义 PHP Golang
时间 - -
Unix 时间戳 time() time.Now().Unix()
取得一个日期的 Unix 时间戳 mktime() time.Date(2022,2,7, 14, 30, 1, 0,time.Local).Unix()
格式化一个本地时间/日期 date() time.Now().Format("2006-01-02 15:04:05")
验证一个格里高里日期 checkdate() -
设定用于一个脚本中所有日期时间函数的默认时区 date_default_timezone_set() -
取得日期/时间信息 getdate() time.Unix(int64(timeStamp),0).Format("2006-01-02 15:04:05")
将任何英文文本的日期时间描述解析为 Unix 时间戳 strtotime() time.ParseInLocation()
返回当前 Unix 时间戳和微秒数 microtime() time.Now().UnixMicro()
时间过去了多久 - time.Since(t)
日志
含义 PHP Golang
- - log.New(os.Stdout, "", log.Lshortfile |log.Ldate |log.Ltime)
- - log.SetOutput(logFile)
- - log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)
- - log.SetPrefix("[小王子]")
- - log.Println("这是一条很普通的日志。")

反射
含义 PHP Golang
- - reflect.TypeOf()
- - reflect.ValueOf()
- - reflect.TypeOf().Kind()
- - reflect.ValueOf().NumField()
- - reflect.ValueOf().Field()
命令行工具
含义 PHP Golang
命令行参数 - os.Args()
合法字符串 - flag.StringVar()
1234、0664、0x1234等类型,也可以是负数。 - flag.IntVar()
1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。 - flag.BoolVar()
任何合法的时间段字符串。如”300ms”、”-1.5h”、”2h45m”。合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。 - flag.DurationVar()
    //定义命令行参数方式
    var name string
    var age int
    var married bool
    var delay time.Duration
    flag.StringVar(&name, "name", "张三", "姓名")
    flag.IntVar(&age, "age", 18, "年龄")
    flag.BoolVar(&married, "married", false, "婚否")
    flag.DurationVar(&delay, "d", 0, "延迟的时间间隔")

    //解析命令行参数
    flag.Parse()
    fmt.Println(name, age, married, delay)
    //返回命令行参数后的其他参数
    fmt.Println(flag.Args())
    //返回命令行参数后的其他参数个数
    fmt.Println(flag.NArg())
    //返回使用的命令行参数个数
    fmt.Println(flag.NFlag())
    $ ./flag_demo -help
Usage of ./flag_demo:
  -age int
        年龄 (default 18)
  -d duration
        时间间隔
  -married
        婚否
  -name string
        姓名 (default "张三")
    $ ./flag_demo -name 沙河娜扎 --age 28 -married=false -d=1h30m
    沙河娜扎 28 false 1h30m0s
    []
    0
    4
channel
ch := make(chan int)
ch := make(chan int, 10)

close(ch)

//读channel
for x := range ch {
    fmt.Println(x)
}
<- ch

//写channel
ch <- 1
ch <- 2
ch <- 3