小白 对于go的基础认知-1 |青训营

68 阅读3分钟

基础

  1. go文件后缀为.go
  2. package main 表示文件所在的包是main,每个文件都必须属于一个包
  3. import 引入一个包,其中包含fmt中的各种函数
  4. func main() main()是主函数,func表示一个函数
  5. 在码代码时在$gopath\src下开始码

编译与运行

  1. go build -> 可执行文件->执行
  2. go run -> 直接运行)(需要编译环境)

写代码注意事项

  • Go会在每行末尾自动加分号
  • 一行一条语句,多了报错
  • Go引入的包必须被使用,不然编译报错

Go语言的转义字符)(escapechar)

  1. \t一个制表符tab 用于排版
  2. \n,经典换行符
  3. \,输出一个""

Go的编程规范

大致与c相同,但有着gofmt -w <filename>这种快速排版命令 也能通过Shift+Tab键集体左移和右移

  • 运算符两边尽量加空格

  • Go语言的大括号是需要紧挨函数的

  • 一行最长不超过80个字符,超过试着换行

    Println("helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld")
    Println("helloworldhelloworldhelloworld",
    "helloworldhelloworldhelloworldhelloworldhelloworld")

    这两行代码是等价的,但第二行可读性更高且更美观

变量的定义和申明

变量的地址可以通过&<变量名>来访问,这点和C一样。

var i <变量类型> //指定变量类型
var i1,i2,i3 <变量类型>//多变量声明
var i1,i2,i3 <变量类型> <i1值>,<i2值>,<i3值>//多变量声明与赋值
var i = <值>//根据值自行判定变量类型(类型推导)

i := <值>//省略var的用法,前面的冒号是为了与赋值语句相区分,这是go的特色,同样用了类型推导,只能用于局部变量的赋值
i1,i2,i3 = <i1值>,<i2值>,<i3值>//
>上述第三种方式等价于``var i <变量类型> <br> i = <值>``

全局变量使用如下方式生成会比较方便和优雅~

var (
   i1 = <i1值>
   i2 = <i2值>
   i3 = <i3值>
   )

ps:golang变量的默认值一般为对应变量的null状态,且局部变量也可按照以上方式声明和赋值


若在一个函数体中出现了与全局变量同名的局部变量,局部变量将会被优先考虑

常量

声明:

const i [type] = <value>
const i1,i2,i3 = <i1value>,<i2value>,<i3value> //多常量的声明与赋值
const(
   i1 = <value1>
   i2 = <value2>
   i3 = <value3>
)
//与全局变量的声明类似

特殊常量

##### iota 一种特殊常量,iota第一次被声明时的值为0,自iota第一次声明开始,在const中每增加一行常量声明都会让iota的值加1,可以理解为一个行索引。

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

此时abc的值分别为0 1 12.(有点搞不懂这种方式)

tips: "<<"的意思为该变量的值的二进制最后加两个0
举个栗子
x<<n==x*(2^n)

Go程序中运算符的使用

算术运算符

假设A=10 B=20

运算符描述栗子输出
+相加或者字符串链接(依照AB的Value type而定)A+B30
-相减A-B-10
*相乘A*B200
/相除B/A2
%求余A%B10
++本身加1A++11
--本身减1A--9

关系运算符

和c相同不多做描述

位运算符

运算符描述功能
&按位与运算对参与运算的两数各对应的二进制相与
|按位或运算对参与运算的两数各对应的二进制相或
按位异或运算对参与运算的两数各对应的二进制象异或
<<左移运算符乘以2的n次方。其功能为把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
>>右移运算符除以2的n次方。功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。

以下为在内存中对2进制整数的运算结果

pqp&qp|qp^q
00000
01011
11110
10011

赋值运算符

基础的只有一个等号,把右边的值赋给左边 但还有类似+=、*=等等等,这些都是先执行左边后执行右边的
例如A+=B等价于A=A+B,C/=B等价与C=C/B之类的