Golang运算符与输入输出函数

本文详细介绍了Go语言中的运算符,包括算数、关系和逻辑运算符,以及赋值运算符的使用。通过示例展示了自增运算符的用法,并解释了运算符的优先级。此外,还讲解了fmt包中的Print、Println、Printf和Scan系列函数,用于输入输出操作,包括格式化输出和从标准输入读取数据。最后,演示了fmt.Scan、fmt.Scanf和fmt.Scanln的使用方法及其区别。
摘要由CSDN通过智能技术生成

运算符

一个程序的最小单位是一条语句,一条语句最少包含一条指令,而指令就是对数据做运算,我们已经学完基本数据类型了,知道如何构建和使用一些最简单的数据,那么我们能对这些数据做什么运算呢,比如fmt.Println(1+1)这条语句包含两个指令,首先是计算1+1的指令,1就是数据,+就是算术运算符中的相加,这样计算机就可以帮我们执行这个指令计算出结果,然后执行第二个指令,即将计算结果2打印在终端,最终完成这条语句。

  • 算数运算符
    在这里插入图片描述
  • 关系运算符
    在这里插入图片描述
  • 逻辑运算符
    在这里插入图片描述
  • 赋值运算符

在这里插入图片描述在这里插入图片描述

     var a = 10
	// 使a自加1
	ret := a + 1
	a = ret
	// 使a自加1
	a = a + 1
	// 使a自加1
	a += 1 // 赋值元算符
	// 使a自加1
	a++ // 注意:不能写成 ++ a 或 -- a 必须放在右边使用
	// b := a++ // 此处为错误的用法,不能写在一行,要单独作为语句使用
	fmt.Println(a)
  • 运算符优先级
    在这里插入图片描述
    // 案例1
    var a, b, c, d = 8, 6, 4, 2
	ret := a + b*c/d
	fmt.Println(ret)
     // 案例2
     x := 10
	y := 1
	x += 5*(1+2) + y
	fmt.Println(x)
	z := 1+2 > 3 || 1 == 1*5
	fmt.Println(z)

输入输出函数

  • 输出函数
    fmt.Print有几个变种:

Print: 输出到控制台,不接受任何格式化操作
Println: 输出到控制台并换行
Printf : 只可以打印出格式化的字符串,只可以直接输出字符串类型的变量(不可以输出别的类型)
Sprintf:格式化并返回一个字符串而不带任何输出

  • Print 和Println
    Print和Println()函数可以打印出字符串或变量的值。
  name := "yuan"
	age := 24

	fmt.Print(name, age)

	fmt.Println("hello world")
	fmt.Println(name)
	fmt.Println(age)
	fmt.Println(name, age)
	fmt.Println("姓名:", name, "年龄:", age)
  • 格式化输出(Printf)
    Printf 根据格式说明符格式化并写入标准输出。Printf 只打印字符串

比如上面打印一个人的基本信息格式

     name := "yuan"
	age := 24
	isMarried := false
	salary := 3000.549
	fmt.Printf("姓名:%s 年龄:%d 婚否:%t 薪资:%.2f\n", name, age, isMarried, salary)
	fmt.Printf("姓名:%v 年龄:%v 婚否:%v 薪资:%v\n", name, age, isMarried, salary)
	fmt.Printf("姓名:%#v 年龄:%#v 婚否:%#v 薪资:%#v\n", name, age, isMarried, salary)

在这里插入图片描述

// 整形和浮点型
fmt.Printf("%b\n", 12)  // 二进制表示:1100
fmt.Printf("%d\n", 12)  // 十进制表示:12
fmt.Printf("%o\n", 12)  // 八进制表示:14
fmt.Printf("%x\n", 12)  // 十六进制表示:c
fmt.Printf("%X\n", 12)  // 十六进制表示:c
fmt.Printf("%f\n", 3.1415)  // 有小数点而无指数:3.141500
fmt.Printf("%.3f\n", 3.1415)  // 3.142
fmt.Printf("%e\n", 1000.25)  // 科学计数法:  1.000250e+03,默认精度为6

// 设置宽度
fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1001", "alvin", 100)
fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1002", "zuibangdeyuanlaoshi", 98)
fmt.Printf("学号:%s 姓名:%-20s 平均成绩:%-4d\n", "1003", "x", 78)

Printf和Sprintf都是替换字符串,Printf是直接输出到终端,Sprintf是不直接输出到终端,而是返回该字符串

     name := "yuan"
	age := 24
	isMarried := false
	salary := 3000.549
	info := fmt.Sprintf("姓名:%s 年龄:%d 婚否:%t 薪资:%.2f\n", name, age, isMarried, salary)
	fmt.Println(info)

输入函数

  • fmt.Scan
    语法:
func Scan(a ...interface{}) (n int, err error)
  • Scan 从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。如果读取的数据个数比提供的参数少,会返回一个错误报告原因。
package main

import "fmt"

func main() {
	var (
		name      string
		age       int
		isMarried bool
	)
	fmt.Scan(&name, &age, &isMarried) // 输入类型不一致,按默认值
	fmt.Printf("扫描结果 name:%s age:%d married:%t\t", name, age, isMarried)
}

将上述代码在终端运行,在终端依次输入 yuan 、26、false使用空格分隔。

go run main.go
yuan 26 false
扫描结果 name:yuan age:26 married:false

fmt.Scan从标准输入中扫描用户输入的数据,将以空白符分隔的数据分别存入指定的参数中。

  • fmt.Scanf
    语法:
func Scanf(format string, a ...interface{}(n int, err error)
  • Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。
// 案例1
var (
		name      string
		age         int
		isMarried bool
	)
fmt.Scanf("1:%s 2:%d 3:%t", &name,&age,&isMarried)
fmt.Printf("扫描结果 姓名:%s 年龄:%d 婚否:%t", name,age,isMarried)

// 案例2
var a, b int
fmt.Scanf("%d+%d", &a, &b)
fmt.Println(a + b)
  • fmt.Scanln
    语法:
func Scanln(a ...interface{}) (n int, err error)
  • Scanln类似于Scan,它遇到换行立即停止扫描。
  • 本函数返回成功扫描的数据个数和遇到的任何错误。
    Scanln和Scan的区别就是Scanln遇到换行立即结束输入,而Scan则会将换行符作为一个空白符继续下一个输入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值