MST

星途 面试题库

面试题:Go函数安全性考量之中等难度:函数参数校验

在Go语言中,编写一个函数接收一个字符串和一个整数作为参数。字符串代表文件名,整数代表文件权限。在函数内部,需要对参数进行安全性校验,确保文件名不包含非法字符(例如路径分隔符'/'在Windows系统下不合法),并且权限值在合理范围内(0 - 777)。请写出该函数及相关校验逻辑。
12.2万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
package main

import (
    "fmt"
    "os"
    "path/filepath"
    "syscall"
)

func createFileWithPermissions(fileName string, permissions int) error {
    // 校验文件名是否包含非法字符
    if filepath.Separator == '/' && strings.Contains(fileName, `\`) ||
        filepath.Separator == '\\' && strings.Contains(fileName, `/`) {
        return fmt.Errorf("文件名包含非法字符")
    }

    // 校验权限值是否在合理范围内
    if permissions < 0 || permissions > 777 {
        return fmt.Errorf("权限值不在合理范围内")
    }

    // 使用syscall.Mkdir创建文件,这里示例用创建文件来展示权限设置,实际情况根据需求调整
    err := syscall.Mkdir(fileName, syscall.ModePerm)
    if err != nil {
        return fmt.Errorf("创建文件失败: %v", err)
    }
    return nil
}

你可以这样调用这个函数:

func main() {
    err := createFileWithPermissions("test.txt", 0755)
    if err != nil {
        fmt.Println(err)
    }
}