1.语法基础
1.例子
//main函数
package main
//使用fmt包 实现了IO函数
import "fmt"
//{不能单独放一行
func main() {
//标识符以一个大写字母开头,可以被外部包的代码使用
//小写开头,对包外不可见,protected修饰符
fmt.Print("hello")
//一行表示一个语句结束
print("123")
}
如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。
2.字符串可以使用+
连接
3.变量声明
var age int
4.格式化字符串
package main
import "fmt"
func main() {
var age = 123
var date = "12.1"
var url = "Code=%d date=%s"
var result = fmt.Sprintf(url, age, date)
fmt.Print(result)
}
5.数据类型
1.bool
var b bool = true
2.数字类型
int float32 float64 ,支持复数,位运算采用补码
uint8,16,32,64 无符号整型(后表示位)
int8,16,32,64
float32,64
complex64,128 复数
byte,rune(类似int32),uint(32/64),uintptr(存放指针)
go 1.9版本对于数字类型,无需定义int及float32、float64,系统会自动识别 (有点像python)。
3.字符串类型
UTF-8 编码标识Unicode文本
4.派生类型:
包括:
- (a) 指针类型(Pointer)
- (b) 数组类型
- (c) 结构化类型(struct)
- (d) Channel 类型 (管道?)
- (e) 函数类型
- (f) 切片类型
- (g) 接口类型(interface)
- (h) Map 类型
6.声明变量
1.var 关键字 (莫名js)
var x1,x2 int
var b,c int = 1, 2 (python!)
未初始化0,"",false
-
以下几种类型为 nil:
var a *int var a []int var a map[string] int var a chan int var a func(string) int var a error // error 是接口
格式化符号
%b 一个二进制整数,将一个整数格式转化为二进制的表达方式
%c 一个Unicode的字符
%d 十进制整数
%o 八进制整数
%x 小写的十六进制数值
%X 大写的十六进制数值
%U 一个Unicode表示法表示的整型码值
%s 输出以原生的UTF8字节表示的字符,如果console不支持utf8编码,则会乱码
%t 以true或者false的方式输出布尔值
%v 使用默认格式输出值,或者如果方法存在,则使用类性值的String()方法输出自定义值
%T 输出值的类型 (类似 instance of)fmt.Printf("%");
2.赋值语句
3.:=
如果变量已经使用 var 声明过了,再使用 := 声明变量,就产生编译错误,格式:
:= 本身就是声明语句
v_name := value
intVal := 1 相等于:
var intVal int
intVal =1
// 这种因式分解关键字的写法一般用于声明全局变量
var (
vname1 v_type1
vname2 v_type2
)
//这种不带声明格式的只能在函数体中出现
//g, h := 123, "hello"
交换两个数
a,b=b,a
4. 常量
1.const
const b string = "123"
//用于枚举
const (
age = 12
xxx
)
- 内置的Println()/Print()函数都是标准错误输出,而fmt.Println()函数是标准输出
- 内置的Println()/Print()函数输出结果可能与预期结果顺序不一致,而fmt.Println()函数输出结果与预期结果完全一致。(这个特性是由标准错误输出和标准输出决定)
- 内置Println()/Print()函数不能接受数组和结构体类型的数据
- 内置Println()/Print()函数对于组合类型的数据输出的结果是参数值的地址,而fmt.Println()函数输出的是字面量
2.特殊常量iota(枚举? 0开始)
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
const (
a = iota //0
b = iota //1
c = iota //2
)
func main() {
fmt.Print(c)
}
=================
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
//const 用于枚举,下一个如果没有初始化就与上面一致
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)
}
===============
const (
i=1