Go语言基础10 | 青训营笔记

79 阅读2分钟

这是我参与「第五届青训营」笔记创作活动的第10天

基础语法

数字解析

在Golang里面,关于数字和之间字符串的转换都在strconv包下。我们可以用strconv.ParseFloat()strconv.ParseInt()来解析字符串。例如strconv.ParseInt(),有三个参数,第一个是字符串,第二个是代表进制(如果是0,表示自动去推测),第三个参数代表64表示访问的是64位精度的整数。我们也可以用strconv.Atoi()来快速把一个十进制字符串转成数字。同样的,我们可以用strconv.Itoa()来把数字转成字符串,在C++中可以用to_string等,用法类似。如果输入不合法的话,这些函数都会返回一个错误。告诉你数值不合法。

package main

import (
    "fmt"
    "strconv"
)

func main() {
    f, _ := strconv.ParseFloat("1.234", 64)
    fmt.Println(f) // 1.234
    
    n, _ := strconv.ParseInt("111", 10, 64)
    fmt.Println(f) // 111
    
    n, _ := strconv.ParseInt("0x1000", 0, 64)
    fmt.Println(n) // 4096
    
    n2, _ := strconv.Atoi("123")
    fmt.Println(n2) // 123
    
    n2, err := strconv.Atoi("AAA")
    fmt.Println(n2, err) // 0 strconv.Atoi: parsing "AAA": invalid syntax
}

进程信息

Golang下的os/exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin/stdout、管道I/O。与C语言或者其他语言中的“系统”库调用不同,os/exec包并不调用系统shell,也不展开任何glob模式,也不处理通常由shell完成的其他扩展、管道或重定向。

下面是Golang里获取进程信息。我们可以用os.Args来获取进程在执行的时候的一些命令行参数。我们可以用os.Getenv()os.Setenv()分别来获取或者写入环境变量。可以用exec.Command()然后来快速启动子进程并且获取其输入输出。

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    // go run example/20-env/main.go a b c d
    fmt.Println(os.Args) 
    fmt.Println(os.Getenv("PATH")) // /usr/local/go/bin...
    fmt.Println(os.Setenv("AA", "BB")) 
    
    buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
    if err != nil {
        panic(err)
    }
    fmt.Println(string(buf))  // 127.0.0.1       localhost
}