go os.FileMode()传值问题

作者: ljh123 | 来源:发表于2018-10-07 16:03 被阅读12次

linux中的权限rwx分别对应4 2 1,相加的值为7,习惯了linux中权限命令使用,会将 os.FileMode(777) 误解等价于 777权限,但是将777传入os.FileMode,你会发现打印出来的不是 -rwxrwxrwx

可能会想只要在编程的时候,在前面加个0不就行了?但是有情况是这样的,就是外部传入一个变量值是十进制数777

package main

import (
    "fmt"
    "os"
)

func main() {
    fmt.Println(os.FileMode(777), 777)
    fmt.Println(os.FileMode(0777), 0777)
}

输出结果:
-r----x--x 777
-rwxrwxrwx 511

正确使用os.FileMode()时,应该先将777 先看成八进制,然后转成十进制值,传入os.FileMode中,转换方法如下

方法一:使用标准库中的strconv.ParseInt,如下

mode := 777
um, _ := strconv.ParseInt(strconv.Itoa(mode), 8, 0)

// 完整测试代码
package main

import (
    "fmt"
    "os"
    "strconv"
)

func main() {
    um, _ := strconv.ParseInt(strconv.Itoa(777), 8, 0)
    fmt.Println(os.FileMode(777), 777)
    fmt.Println(os.FileMode(0777), 0777)
    fmt.Println(os.FileMode(um), um)
}

输出:
-r----x--x 777
-rwxrwxrwx 511
-rwxrwxrwx 511

方法二:自己编写转换进制函数

相关文章

  • go os.FileMode()传值问题

    linux中的权限rwx分别对应4 2 1,相加的值为7,习惯了linux中权限命令使用,会将 os.FileMo...

  • iOS 如何优雅地跨层通信

    1. 传值 (数据传递) 传值在程序开发中使我们每天需要面临的问题传值方式: 正向传值,逆向传值,跨层传值...一...

  • <>

    数组和切片 切片和数组的区别 数组是属于值类型。结构体,基础类型数据也属于值类型。 注意GO语言对于“传值和传引用...

  • iOS中2种正向传值,6种反向传值方式归纳总结

    1、属性传值 前向后传值。2、协议传值3、Block传值 代替协议代理传值,主要时间点问题。4、单...

  • swift 组件式开发 跨组件正向传值和回传以及返回方式

    现在负责的项目是组件式开发,涉及到了跨组件传值和返回传值以及跳转问题 问题描述: 正向传值和反向传值如何实现 直接...

  • 面试题(一)

    1. Go 语言参数传递是值传递还是引用传递 Go 语言中所有的传参都是值传递,都是一个副本,一个拷贝。因为拷贝的...

  • 2018-09-05

    组件传值问题 父组件给子组件传值应该使用props。子组件要给父组件传值,需要调用父组件传递的方法。props传值...

  • go的传值和传引用

    go可以看成增强版的C语言,因此也在一定程度上延续了C的一些特性。和C一样Go语言的函数调用参数全部是传值的,包括...

  • go语言中值拷贝的成本

    在go语言中,值拷贝是常有的事情。赋值,传参和发送值给channel都有值拷贝。本文将讨论各种类型的值拷贝成本。 ...

  • golang的参数传递,是引用传递还是值传递?

    Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。因为拷贝的内容有时候是非引用类型(int、stri...

网友评论

    本文标题:go os.FileMode()传值问题

    本文链接:https://www.haomeiwen.com/subject/xmmlaftx.html