golang--学习day02

Go 语言中的Scan 与 Scanf 和 Scanln

类似java中的scanner功能相似,在GO中也是在fmt包中

fmt.Scan
输入:读取以空白字符分割的值,返回到地址中进行修改,换行视为空白符
返回值:错误处理,返回值中有一个Int类型的值是返回正确的数量,有一个err是错误的原因

package main

import "fmt"

func main() {
	var (
		name  string
		age   int
		money float64
	)

	n, err := fmt.Scan(&name, &age, &money)

	if err != nil {
		fmt.Println("错误:", err, "成功的数量:", n)
	} else {
		fmt.Println(n, name, age, money)
	}
}

fmt.Scanln

Scanln 类似 Scan,但它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。使用场景就是只要换行就结束。
返回错误和Scan一样。

package main

import (
	"fmt"
)

func main() {
	var (
		name  string
		age   int
		money float64
	)

	n, err := fmt.Scanln(&name, &age, &money)

	if err != nil {
		fmt.Println("错误:", err, "成功的数量:", n)
	} else {
		fmt.Println(n, name, age, money)
	}
}

fmt.Scanf

格式化读入,暗含强制类型转换
Scanf扫描从标准输入读取的文本,将空格分隔的连续值存储到由格式决定的连续参数中。

package main

import (
	"fmt"
)

func main() {
	var (
		name  string
		age   int
		money float64
	)

	n, err := fmt.Scanf("%s %d %f", &name, &age, &money)

	if err != nil {
		fmt.Println("错误:", err, "成功的数量:", n)
	} else {
		fmt.Println(n, name, age, money)
	}
}

Go语言变量作用域

作用域:已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。
Go语言中变量可以在三个地方声明:
。局部变量:函数内部声明/定义的变量叫局部变量,作用域仅限于函数内部全局变量: 函数外部声明/定义的变量叫全局变量,可以在整个包甚至外部包(导出)中使用。全局变量和局部变量的名称可以相同,但是函数内会优先使用局部变量。
参数变量:在函数中,作为局部变量来使用。

局部变量 localvariable

在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量

注意点:局部变量不是一直存在的,它只在定义它的函数被调用后存在,函数调用结束后这个局部变量就会被销毁。

package main

import (
	"fmt"
)

var age int = 20
var name string = "zhangsan"

func test() {
	age := 10
	name := "lisi"
	fmt.Println("age=", age)
	fmt.Println("name=", name)
}

func main() {
	fmt.Println("age=", age)
	fmt.Println("name=", name)

	fmt.Println("--------------------------------------------")

	test()
}

全局变量 globalvariable

定义:函数外部定义的变量都属于全局变量; 全局变量声明必须以 var 开头生效范围:

当前 package 内如果想要其他 package 访问,全局变量以大写开头

入口文件:main.go

package main

import (
	"Go/utils"
	"fmt"
)

func main() {
	//调用utils包内的全局变量Watch
	fmt.Println(utils.Watch)

	//调用utils包内的Hello函数 
	utils.Hello()
}

utils包内文件:hello.go

package utils

// 全局变量hello
var hello string = "hello world"

utils包内文件:tool.go

package utils

import (
	"fmt"
	"time"
)

var Watch string = time.Now().String()
var watch string = time.Now().String()

func Hello() {
	//同一个包内调用全局变量hello
	fmt.Println(hello)
}

参数变量 parameter variable

定义:函数调用时传递的变量 生效范围:函数范围

在定义函数时函数名后面括号中的变量叫做形式参数 (简称形参)

特别重要:形式参数只在函数调用时才会生效函数调用结束后就会被销毁,在函数未被调用时,函数的形参并不占用实际的存储单元,也没有实际值

形式参数会作为函数的局部变量来使用

package main

import "fmt"

var a int = 30

func main() {
	var a int = 10
	var b int = 20
	var c int = 0

	fmt.Printf("main函数中 a = %d \n", a)

	fmt.Println("------------------------------------------")

	c = sum(a, b)

	fmt.Println("------------------------------------------")

	fmt.Printf("main函数中 c = %d \n", c)
}

func sum(a, b int) int {
	fmt.Printf("sum函数中 a = %d \n", a)
	fmt.Printf("sum函数中 b = %d \n", b)

	return a + b
}

OS包基础用法

package main

import (
	"fmt"
	"os"
)

var a int = 30

func main() {
	dir, err := os.UserConfigDir()

	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(dir)
	}
}

整蛊小程序:在桌面爬取图片

package main

import (
	"bufio"
	"fmt"
	"io"
	"net/http"
	"os"
	"strconv"
)

var imageURL string = "https://img2.baidu.com/it/u=1576394190,501333334&fm=253&fmt=auto&app=120&f=JPEG?w=500&h=581"

func getImage(path string) {
	res, err := http.Get(imageURL)
	if err != nil {
		return
	}

	defer res.Body.Close()
	reader := bufio.NewReader(res.Body)

	file, err := os.Create(path)

	if err != nil {
		panic(err)
	}

	writer := bufio.NewWriter(file)

	written, err := io.Copy(writer, reader)

	if err != nil {
		panic(err)
	} else {
		fmt.Println(written)
	}

}

func main() {
	userHomePath, err := os.UserHomeDir()
	if err != nil {
		return
	} else {
		deskTopPath := "\\Desktop"
		for i := 0; i < 50; i++ {
			getImage(userHomePath + deskTopPath + "\\林志玲" + strconv.Itoa(i) + ".jpeg")
		}

	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值