Golang的入门教程(三)

栏目: Go · 发布时间: 5年前

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

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图片,效果如下:

Golang的入门教程(三)

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这个指针,获取到最终的值,代码运行流程如下:

Golang的入门教程(三)

运行流程

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 )

后续会继续更新~~~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

C程序设计语言

C程序设计语言

(美)Brian W. Kernighan、(美)Dennis M. Ritchie / 徐宝文、李志译、尤晋元审校 / 机械工业出版社 / 2004-1 / 30.00元

在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用广泛。本书原著即为C语言的设计者之一Dennis M.Ritchie和著名计算机科学家Brian W.Kernighan合著的一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序设计的教材和专著均以此书为蓝本。原著第1版中介绍的C语言成为后来广泛使用的C语言版本——标准C的基础。人们熟知的“hello,World"程序就是由本书......一起来看看 《C程序设计语言》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具