Go Go Go (一)


还是学一下,这里简单记录一下

安装配置

现在用的开发机是win10,就在上面安装了,不过这种安装真的没什么可以说的,尤其是win,下载msi,next下去就可以了,GoROOTGOPATH都会自己配置好的,然后下载一个GoLand做IDE,(实在不喜欢用vscode).settings里配置一下GOROOTGOPATH(不出意外也会自己配置的),然后开发

创建一个项目后,在项目下还要创建一个main包,然后再main包下创建.go文件,写个hello world,这里说一下main包,应该是go语言要求的main包才是整个项目的入口,所以一定要有一个package main的go文件,然后写一个main函数.
import : 通常写法就是 import "package name",其中可以对包重命名,写在package name前就可以了,例如: import fm "fmt"
可见性规则 : 比较好玩,当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,就是public的,对外可见的,当是小写字符开头,就是private,对外不可见的.
当你导入一个包但是不用的话,会报错.

注释

和java相同

常量

常量定义格式:
const identifier [type] = value
常量的类型只能是bool,数字和字符串.
类型可以省,常量的值必须是在编译期就确定的.但可以使用内置函数

变量

变量定义格式:
var identifier type
var identifier [type] = value
局部变量可以用a := 1这样来声明

变量被声明后会被赋予初值,int=0,float=0.0,bool=false,string=空字符串””,指针=nil
占位符用法,并不像scala中一样,这里用来抛弃赋值,_,b = 1,2

作用域

没什么特殊的,值得一说的就是同名变量,内部的同名变量会覆盖外部的

值类型和引用类型

java和c那一套

基本类型和运算符

Go是强类型语言,不支持隐式转换

布尔bool

没什么好说的

数字类型和float

  • int
    有int,uint,uintptr,前两个在32位系统上,使用32位,64位则是64位,后一个长度被设定为存放一个指针即可
    有符号整数
    • int8(-128 -> 127)
    • int16(-32768 -> 32767)
    • int32(-2,147,483,648 -> 2,147,483,647)
    • int64(-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807)
      无符号整数:
    • uint8(0 -> 255)
    • uint16(0 -> 65,535)
    • uint32(0 -> 4,294,967,295)
    • uint64(0 -> 18,446,744,073,709,551,615)
  • float
    只有float32和float64
    • float32(+- 1e-45 -> +- 3.4 * 1e38)
    • float64(+- 5 * 1e-324 -> 107 * 1e308)

值得注意的:

  • 尽量使用float64,因为math包返回的都是float64
  • Go中不允许不同类型混合使用赋值(包括int 和 int32),但是常量可以赋值到变量(不限类型)

运算符

整除 : /
取余 : %

类型别名

使用type alias int其中alias就是int的别名

字符类型

byte是uint8的别名,声明的时候也是和java一样用单引号,var c byte = 'A'

字符串

Go中的字符串的字符根据需要占用1-4个字节

字符串比较

比较运算符(==,!=,<,> …),都是把内存中的字符串按字节比较

索引

类似python吧,使用[]来索引,从0开始

字符串拼接

就是+,但是跟java中类似,并不高效,更好的办法是使用函数strings.Join()或者字节缓冲(bytes.Buffer)

函数小解

基本格式 :
func functionName()
括号内部可以写参数,但是类型在参数名后(和java相反),并且后续的 { 不能放在下一行,必须紧跟在声明后面.
符合规范的声明格式:
func functionName(parameter_list) (return_value_list) { … }
其中
参数列表中,如果一系列参数的类型相同,可以写在一起,例如:a,b int , c string
return_value_list一般的格式是变量名 类型但是可以省略变量名.

特殊/内置函数

  • init函数,这个函数在每个包完成初始化后自动执行,优先级比main函数高,用于变量初始化

指針

程序在内存中存储它的值,每个内存快有一个地址,通常用十六进制数表示
取地址符是 &,放在一个变量前使用
当我们想要存储一个地址时,就需要指针了,这是一个特殊的数据类型,使用*加类型表示执行该类型的指针,例如*int表示指向int的指针.
声明一个指针 :
var p *int
内存地址的大小和所在机器的位数有关,与指向的值得大小无关.
*也可以被放在指针变量名前,就可以取出这个指针指向的地址存储的值,当然可以这样使用:`var == *(&var)
在Go中,指针是不允许运算的


  目录