Golang的入门教程(三)

作者: Clark_new | 来源:发表于2019-05-22 20:35 被阅读9次

    1:输出正弦函数图像

    在Go语言中,正弦函数由math包提供,函数入口为math.Sin.正弦函数的参数为float64,返回值也是float64.在使用正弦函数时,根据实际精度可以进行转换.
    Go语言的标准库支持对图片像素进行访问,并且支持输出各种图片格式,如JPEG,PNG,GUF等.

    package main
    
    import (
        "image"
        "image/color"
        "image/png"
        "log"
        "math"
        "os"
    )
    func main() {
        const size  = 300//图片大小
        //根据给定大小创建灰度图
        pic := image.NewGray(image.Rect(0,0,size,size))
        //遍历每个像素
        for x := 0; x < size; x++ {
            for y := 0; y < size; y++ {
                //填充为白色
                pic.SetGray(x,y,color.Gray{255})
            }
        }
        //从0到最大像素生成x坐标
        for x := 0; x< size; x++ {
    
            //让sin的值的范围在0~2pi之间
            s := float64(x) * 2 * math.Pi / size
    
            //sin的幅度为一半的像素.向下偏移一半像素并翻转
            y := size/2 - math.Sin(s)*size/2
    
            //用黑色绘制sin轨迹
            pic.SetGray(x,int(y),color.Gray{0})
    
        }
        //创建文件
        file, err :=os.Create("sin.png")
        if err != nil {
            log.Fatal(err)
        }
        //使用png格式将数据写入文件
        png.Encode(file,pic)//将image信息写入文件中
    
        //关闭文件
        file.Close()
    }
    
    

    运行后会生成一个sin.png图片,效果如下:


    sin.png

    2:从指针获取指针指向的值

    在对普通变量使用"&"操作符取地址获得这个变量的指针后,可以对指针使用"*"操作,也就是指针取值,代码如下:

    package main
    
    import (
        "fmt"
    )
    
    func main() {
    
        // 准备一个字符串类型
        var house = "Malibu Point 10880, 90265"
    
        // 对字符串取地址,ptr类型为*string
        ptr := &house
    
        // 打印ptr的类型
        fmt.Printf("ptr type: %T\n", ptr)
    
        // 打印ptr的指针地址
        fmt.Printf("address: %p\n", ptr)
    
        // 对指针进行取值操作
        value := *ptr
    
        // 取值后的类型
        fmt.Printf("value type: %T\n", value)
    
        // 指针取值后就是指向变量的值
        fmt.Printf("value: %s\n", value)
    
    }
    
    

    代码输出如下

    ptr type: *string
    address: 0xc000090030
    value type: string
    value: Malibu Point 10880, 90265
    
    

    取地址操作符"&"和取值操作符""是一对互补操作符,"&"取出地址,""根据地址取出地址指向的值.
    变量,指针变量,指针地址,取地址,取值的相互关系和特性如下:
    1:对变量进行取地址(&)操作,可以获得这个变量的指针变量.
    2:指针变量的值是指针地址.
    3:对指针变量进行取值(*)操作,可以获得指针变量指向原变量的值.

    3:使用指针变量获取命令行的输入信息

    Go语言的flag包中,定义的指令以指针类型返回.通过学习flag包,可以深入了解指针变量在设计上的方便之处.
    下面的代码通过提前定义一些命令行指令和对应变量,在运行时,输入对应参数的命令行参数后,经过flag包的解析后即可通过定义的变量获取命令行的数据.

    // 导入系统包
    import (
        "flag"
        "fmt"
    )
    
    // 定义命令行参数
    var mode = flag.String("mode", "", "process mode")
    
    func main() {
    
        // 解析命令行参数
        flag.Parse()
    
        // 输出命令行参数
        fmt.Println(*mode)
    }
    

    执行命令行

    go run flagparse.go --mode=fast
    

    打印如下

    fast
    

    由于之前使用flag.String已经注册了一个mode的命令行参数,flag底层知道怎么解析命令行,并且将值赋给mode*string指针.在Parse调用完毕后,无须从flag获取值,而是通过自己注册的mode这个指针,获取到最终的值,代码运行流程如下:


    运行流程

    4:创建指针的另一种方法----new()函数

    Go语言还提供了另外一种方法来创建指针变量,格式如下:
    new(类型):
    一般这样写

    str := new(string)
    
    *str = "ninjia"
    
    fmt.Println(*str)
    

    new()函数可以创建一个对应类型的指针,创建过程会分配内存.被创建的指针指向的值为默认值.

    入门教程(一):https://www.jianshu.com/p/de26de7ca907
    入门教程(二):[https://www.jianshu.com/p/55383fb62f4b)

    后续会继续更新~~~

    相关文章

      网友评论

        本文标题:Golang的入门教程(三)

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