学go第二天

fmt包的格式化输出输入

fmt包的格式化输出

摘自(https://www.cnblogs.com/yinzhengjie/p/7680829.html/)

  • 常用
    %d 表示为十进制
    %c 该值对应的unicode码值
    %T 值的类型的Go语法表示
    %v 使用默认格式输出的内置或者自定义类型的值,或者是使用其类型的String()方法输出自定义值,(如果有的话)
  • 通用
    %v 值的默认格式表示。当输出结构体时,扩展标志(%+v)会添加字段名
    %#v 值的Go语法表示
    %T 值的类型的Go语法表示
    %% 百分号
  • 布尔值
    %t 单词true或false
  • 整数
    %b 表示为二进制
    %c 该值对应的unicode码值
    %d 表示为十进制
    %o 表示为八进制
    %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
    %x 表示为十六进制,使用a-f
    %X 表示为十六进制,使用A-F
    %U 表示为Unicode格式:U+1234,等价于”U+%04X”
  • 浮点数、复数的两个组分
    %b 无小数部分、二进制指数的科学计数法
    %G 根据实际情况采用%E或%F格式(以获得更简洁、准确的输出)
  • 字符串和[]byte
    %s 直接输出字符串或者[]byte %q 该值对应的双引号括起来的go语法字符串字面值,必要时会采用安全的转义表示
    %x 每个字节用两字符十六进制数表示(使用a-f)
    %X 每个字节用两字符十六进制数表示(使用A-F)
  • 指针
    %p 表示为十六进制,并加上前导的0x
    %f: 默认宽度,默认精度
    %9f 宽度9,默认精度
    %.2f 默认宽度,精度2 %9.2f 宽度9,精度2 %9.f 宽度9,精度0
  • 其它flag
    “+” 总是输出数值的正负号;对%q(%+q)会生成全部是ASCII字符的输出(通过转义)
    "-"    在输出右边填充空白而不是默认的左边(即从默认的右对齐切换为左对齐)
    #切换格式
    八进制数前加0(%#o),十六进制数前加0x(%#x)或0X(%#X),指针去掉前面的0x(%#p);
    对%q(%#q),如果strconv.CanBackquote返回真会输出反引号括起来的未转义字符串;
    对%U(%#U),如果字符是可打印的,会在输出Unicode格式、空格、单引号括起来的go字面值;
    ‘ ‘ 对数值,正数前加空格而负数前加负号;
    对字符串采用%x或%X时(% x或% X)会给各打印的字节之间加空格;
    0 使用0而不是空格填充,对于数值类型会把填充的0放在正负号后面;
    verb会忽略不支持的flag。例如,因为没有十进制切换模式,所以%#d和%d的输出是相同的。

对每一个类似Printf的函数,都有对应的Print型函数,该函数不接受格式字符串,就效果上等价于对每一个参数都是用verb %v。另一个变体Println型函数会在各个操作数的输出之间加空格并在最后换行

1
2
3
4
5
6
7
8
9
10
11
12
package main
import "fmt"
func main() {
a:=10
b:="asd"
c:='a'
d:=3.14
fmt.Printf("%T,%T,%T,%T\n",a,b,c,d)//%T操作变量所属类型
//%d 整型格式 %s 字符串格式 %c 字符格式 %f 浮点格式
fmt.Printf("a=%d,b=%s,c=%c,d=%f\n",a,b,c,d)
fmt.Printf("a=%v,b=%v,c=%v,d=%v\n",a,b,c,d)
}

运行结果

变量的输入

fmt.Scanf()必须要输入正确的格式

1
2
3
4
5
6
7
8
9
package main
import "fmt"
func main() {
var a int
fmt.Printf("请输入变量a:")
//fmt.Scanf("%d",&a)
fmt.Scan(&a)
fmt.Println(a)
}

类型转换

golang中不允许隐式转换,所有类型转换必须显式声明,而且转换只能发生在两种相互兼容的类型之间
布尔类型和整型不兼容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package main
import "fmt"
func main() {
var flag bool
flag=true
fmt.Printf("flag=%t\n",flag)
//bool类型不能转换为整型
//fmt.Printf("flag=%d\n",int(flag))
//整型也不能转换为bool
//flag=bool(1)
var ch byte
ch='a'
var t int
t=int(ch) //byte转int
fmt.Printf("t=",t)
fmt.Println()
fmt.Println(ch)
}

类型别名

type关键字(可以为变量类型更改一个名字)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package main
import "fmt"
func main() {
type bigint int64
var a bigint
fmt.Printf("a = %T\n",a)
type (
long int64
char byte
)
var b long = 11
var c byte = 'a'
fmt.Printf("%d ,%s\n",b,c)
}

运算符

详细使用实例(https://blog.csdn.net/ahaotata/article/details/84316528)

数学运算符

“+” 加
“-“ 减
“*” 乘
“/“ 除
“%” 取模(取余)
“++” 后自增(没有前自增)
“- -“ 后自减(没有前自减)

关系运算符

“==” 判断相等
“!=” 不相等
“<” 小于
“>” 大于
“<=” 小于等于
“>=” 大于等于

逻辑运算符

“!” 非,取反
“&&” 与,同真为真
“||” 或,有一个为真为真

位运算符

“&” 按位与,参与运算的两数各对应的二进位相与(加)
“|” 按位或,参与运算的两数各对应的二进位相或(有1取1)
“^” 异或,参与运算的两数各对应的二进位相异或(两数不同得1)
“<<” 左移,左移n位=乘以2的n次方,左边丢弃,右边补0
“>>” 右移,右移n位=除以2的n次方,右侧丢弃左边补0

赋值运算符

“=” 普通赋值
“+=” 相加后再赋值(a+=1等于a=a+1)
“-=” 相减后再赋值(a-=1等于a=a-1)
“*=” 相乘后再赋值(a*=2等于a=a*2)
“/=” 相除后再赋值(a/=2等于a=a/2)
“%=” 取模后再赋值(a%=2等于a=a%2)
“<<=” 左移后再赋值(a<<=2等于a=a<<2)
“>>=” 右移后再赋值(a>>=2等于a=a>>2)
“&=” 按位与后再赋值(a&=2等于a=a&2)
“^=” 按位与后再赋值(a^=2等于a=a^2)
“|=” 按位或后再赋值(a|=2等于a=a|2)

其他运算符

“&” 取地址运算符(&a=变量a的地址)
“*” 取值运算符(*a=指针变量a所指向内存的值)
使用示例:

1
2
3
4
5
6
7
8
9
10
11
package main
import "fmt"
func main() {
fmt.Println("1>2",1>2)
var a int=10
var ptr *int
ptr=&a
fmt.Printf("a 的值为 %d\n", a);
fmt.Println(&a)
fmt.Printf("*ptr 为 %d\n", *ptr);
}

运行结果:

1
2
3
4
1>2 false
a 的值为 10
0xc00004c088
*ptr 为 10

运算符优先级(https://www.sojson.com/operation/go.html)

图片

-------------本文结束❤️感谢您的阅读-------------
ボ wechat
扫描二维码,可获得菜鸡一枚
打赏测试
0%