Go 其一 基础内容

  艺多不压身,学习一下最近蛮火的Go语言,整理一下笔记。相关Code和笔记也放到了Git上,传送门

 

1.从Hello world开始

  1.  GOPATH 1.8版本默认在%USERPROFILE%/go
  2.  命令build命令 go build xxx.go, 运行命令go run xxx.go
  3.  Go默认情况下会使用静态链接, 编译好的文件可以直接运行
  4.  应用程序入口必须是main包, package main 必须是main方法:func main()  文件名不一定是main.go
  5.  Go中main函数不支持任何返回值,通过os.Exit来返回状态 
  6. main函数不支持传入参数,在程序中直接通过os.Args获取命令行参数

 

 

2.测试程序,变量,常量

  1.  源码文件必须以_test结尾: xxx_test.go
  2. 测试方法名以Test开头: func TestXXX(t *testing.T) {...}
  3. 运行命令 go test -v .\first_test.go
  4.  Go支持多种复制关系以及一定的类型推断,但在2.0版本后将会不推荐甚至禁用一部分写法,目的是code的风格统一
  5.  同一个文件夹下不同go文件的package要相同,否则会报错 can't load package: package...
  6.  在一个赋值语句中可以对多个变量进行同时赋值 例如: a,b=b,a

 

  常量定义方面

// 1.快速设置连续值
const (
Monday = iota + 1
Tuseday
Wednesday
...
Sunday
)

// 2. 表状态的bite位也可以这么玩
Const (
Open = 1 << iota
Close
Pending
)

  

 

3.基本数据类型

bool
string
int int8 int16 int32 int64
uint unit8 unit16 unit32 unit64 uintptr
byte // alias for unit8
rune // alias for int32, represents a Unicode code point !!!这个类型以后会详详细介绍,暂且放一放
float32 float64
complex64 complex128

  1. 默认类型根据运行的机器的位数决定使用多少位。
  2. Go语言不允许任何隐式类型转换
  3. 别名和原有类型也不能进行隐式类型转换

类型的预定义值
  例如:
    math.MaxInt64
    math.MaxFloat64
    math.MaxUnit32

指针类型 于其他主要变成语言的差异
  1. 不支持指针运算
  2. string是值类型,其默认的初始化值为空字符串,而不是nil

 

 

4.运算符

算术运算符

  1. 常用运算符如 + - * / % ++(后置) --(后置)与别的语言没什么差异
  2. Go语言中没有前置的 ++ -- (先自增,再引用)

比较运算符
  常用运算符与别的语言没什么差异,但什么对象可以比较稍有差异,日后补充

  例:用==比较数组
    相同维数且含有相同个数元素的数组才可比较
  每个元素都相等才相等

逻辑运算符
与别的语言没由什么差异

位运算符
&    |   ^    <<    >>没什么差异
  与其他语言的差异 &^ 按位置零 (按位清零) 运算符
    1 &^ 0 -- 1
    1 &^ 1 -- 0
    0 &^ 1 -- 0
    0 &^ 0 -- 0
  该运算符这样计算, 只要操作符右边的运算数上的位置为1,无论左边对应位置上的运算数是多少都清零。
右边操作符上的操作数为0时则左边原来是什么就显示什么。


注意,使用Go语言就要使用Go的特点,写出真正的Go程序而不是将其他语言翻译成Go.

 

5.条件和循环

循环
  Go语言仅支持循环关键字for
  例 for j:= 7; j <= 9; j++ (不需要括号括起来)

while条件循环 while (n < 5)
Go版本
n := 0
for n < 5 {
n++
fmt.Println(n)
}

无限循环 while(true)
Go版本
n := 0
for {
...
}

  

if条件

例:
if condition {
...
} else {
...
}

if condition - 1 {
...
} else if condition - 2 {
...
} else {
...
}

  

区别:

  1. condition表达式结果必须为布尔值(没有隐式转换,int是不可以的)
  2. 支持变量赋值:
if vardeclaration; condition {
// code to be executed if condition is true
}

  

switch条件与其他语言的差异

  1. 条件表达式不限制为常量或者整数
  2. 单个case中,可以出现多个结果选项,使用逗号分隔
  3. 与C语言等规则相反,Go语言中不需要使用break来明确退出一个case
  4. 可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if...else...的逻辑作用等同
写法举例:
1.
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
//break
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.", os)
}

2.
switch {
case 0 <= Num && Num <= 3:
fmt.Prinft("0-3")
case 4 <= Num && Num <= 6:
fmt.Prinft("4-6")
case 7 <= Num && Num <= 9:
fmt.Prinft("7-9")
}

  

posted @ 2020-06-14 16:14  DogTwo  阅读(581)  评论(0编辑  收藏  举报