fmt包相关
fmt包主要是实现了格式化的I/O函数
fmt.Println() 行打印
fmt.Printf() 格式化输出
%d int
%s str
%t type,类型
%p 内存地址
%v 获取变量的值
%o 控制8进制输出
%x 控制16进制输出
%c 打印参数
%q 打印带引号的字符

i := 'a' j := '重' fmt.Printf("%d %[1]c %[1]q ",i) fmt.Printf("%d %[1]c %[1]q ",j) //97 a 'a' //37325 重 '重'
fmt.Scan() 扫描输入的文本
常量
const 申明常量,一旦申明不可更改。其类型只能是数字,字符串或者布尔值

package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, "str" //多重赋值 area = LENGTH * WIDTH fmt.Printf("面积为 : %d", area) println() println(a, b, c) } //运行结果 //面积为 : 50 //1 false str
另外常量可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过:

package main import "unsafe" const ( a = "abc" b = len(a) c = unsafe.Sizeof(a) ) func main(){ println(a, b, c) } //运行结果 //abc 3 16
a.unsafe.sizeof函数是用来计算结构体的空间大小,只返回数据类型的大小,不管引用数据的大小
b.string类型的不是直接存的数据,而是一个结构体,用指针指向实际数据地址
type StringHeader struct { Data uintptr Len int }
c.在64位系统上uintptr
int
都是8字节,加起来就16了。
iota 特殊常量,可以认为是一个可以被编译器修改的常量。
1.iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前)
2.const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

const ( a = iota b = iota c = iota )

const ( a = iota b c )
iota的用法

package main import "fmt" func main() { const ( a = iota //0 b //1 c //2 d = "ha" //独立值,iota += 1 e //"ha" iota += 1 f = 100 //iota +=1 g //100 iota +=1 h = iota //7,恢复计数 i //8 ) fmt.Println(a,b,c,d,e,f,g,h,i) } //运行结果 //0 1 2 ha ha 100 100 7 8
iota有趣的实例

package main import "fmt" const ( i=1<<iota j=3<<iota k l ) func main() { fmt.Println("i=",i) fmt.Println("j=",j) fmt.Println("k=",k) fmt.Println("l=",l) } //运行结果 //i= 1 //j= 6 //k= 12 //l= 24
1.iota 表示从 0 开始自动加 1
2.所以 i=1<<0, j=3<<1(<< 表示左移的意思),即:i=1, j=6
3.关键在 k 和 l,从输出结果看 k=3<<2,l=3<<3
解析:
a. i = 1 ; 左移 0 位,不变仍为 1
b. j = 3; 左移 1 位,变为二进制 110, 即 6
c. k = 3; 左移 2 位,变为二进制 1100, 即 12
d. l = 3; 左移 3 位,变为二进制 11000,即 24