GoLand安装教程—http://c.biancheng.net/view/6124.html
注意事项一
1)使用大小写决定标识符(常量、变量、类型、接口、结构或函数)是否可以被外部包所调用;
大写字母开头----可被外部包的代码所使用(需先导入)----public
小写字母开头----对包外不可见,包内可见并可用----private
2)局部变量—大括号{}内部的变量 全局变量—函数和大括号{}外部的变量;
3)三种方式定义变量
var a int=10//标准格式
var b=10//自动推断类型格式
c:=10//简短声明格式 只能用于函数体内,不能用于全局变量的声明与赋值
4)变量的交换方式
var a int=10
var b int=20
//第一种:
a=a^b
b=b^a
a=a^b
//第二种:
b,a=a,b
5)匿名变量—函数返回值并不是全部所需,匿名变量用"_"替换即可—不占命名空间,不分配内存;
func GetData(){
return 10,20
}
a,_=GetData()//返回第一个值
_,b=GetData()//返回第二个值
6)基本数据类型
有符号整型:int8、int16(short)、int32、int64(long)、int;
无符号整型:uint8(byte)、uint16、uint32、uint64、uint;
浮点型:float32、float64
math.MaxFloat32---float32最大值(3.4*10^38) math.SmallestNonzeroFloat32----float32最小值(1.4*10^(-45))
math.MaxFloat64---float64最大值(1.8*10^308) math.SmallestNonzeroFloat64----float64最小值(4.9*10^(-324))
复数型:complex64(float32类型的实部和虚部)、complex128(float64类型的实部和虚部)
字符串: 双引号---字符串字面量----不能跨行 反引号---多行字符串---用于内嵌源码和内嵌数据
字符(单引号):byte---1字节---uint8的别名类型 rune----4字节----int32的别名类型
var a byte='a'
var b rune='一'
7)复合数据类型(派生数据类型):数组(array)、切片(slice)、映射(map)、函数(function)、结构体(struct)、通道(channel)、接口(interface)、指针(pointer);
8)打印格式
通用 %v---值的默认格式 %+v---类似于%v,结构体时添加字段名 %T---值的类型
%t---布尔型(单词true or false)
整型 %b、%o、%d、%x、%X---二、八、十、十六进制
%c---对应的unicode码值 %8d---该整型长度8,不足前补空格 %08d---该整型长度8,不足前补0
浮点型与复数型 %b---无小数、二进制指数的科学计数法 %e==%.6e---有6位小数的科学计数法
%E---科学计数法 %f==%.6f----有6位小数部分(等价于%F)
%g---根据实际情况采用%e或%f %G---根据实际情况采用%E或%F
字符串与字节数组 %s---直接输出 %q---该值对应的双引号括起来的Go语法字符串字面值(采用安全的转义)
9)常量的声明方式(布尔型、数字型–整-浮-复、字符串)
const 标识符 [类型] = 值 //可省略类型说明符[类型]---编译器可自动推断
const B string="shuaige"//显示类型
const C="meinv"//隐式类型
const WIDTH,HEIGHT=value1,value2//多个相同类型
常量组不指定类型和初始值----与上一行非空常量值相同
package main
import "fmt"
const (
a=10
b
c
)
func main() {
fmt.Println(a,b,c)//10 10 10
}
10)iota–特殊常量值------一个系统定义可被编译器修改的常量值
当const出现时,被重置为0,每出现一个常量,iota所代表的值会自动增加1
iota—常量组中的常量计数器
package main
import "fmt"
const (
a=iota
b
c
)
func main() {
fmt.Println(a,b,c)//0 1 2
}
11)类型别名与类型定义
类型别名格式:type 类型别名 = 类型
定义类型格式:type 新的类型名 类型
程序性能考虑:尽可能使用:=去初始化声明一个变量(函数内部) 尽可能使用字符代替字符串
type Stringli = string//Stringli 为string的别名,二者等效---只会在代码中存在---编译完成时,不会有别名类型
type Newstring string//Newstring形成一种新的类型,本身依然具备string的特性;
12)位运算符:比算术运算符速度快,开发高效率程序;
按位异或(^):两数对应的二进制位相异或,1 ^ 0 = 1 1 ^ 1 = 0
左移运算符(<<):就是乘以2的n次方,运算数的各二进制位全部左移若干位
右移运算符(>>):就是除以2的n次方,运算数的各二进制位全部右移若干位
13)其他运算符
&---返回变量存储地址---&a将给出变量的实际地址
*---指针变量---*a是一个指针变量
package main
import "fmt"
func main() {
var a int =4
var ptr *int
ptr=&a//ptr是地址
fmt.Println(a)
fmt.Println(ptr)
fmt.Println(*ptr)
}