go 1 --- 基础

Posted yangshixiong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 1 --- 基础相关的知识,希望对你有一定的参考价值。

所有的程序都会有涉及到数据类型, go常用的基本数据类型

int, byte,float, array, string, struct, map, channel, interface, function,其余的rune,complex,uintptr用到的时候在查,一般很少用到。rune一般在处理汉字使用到,这就体现我泱泱大国的文字魅力

 

go是静态语言,不能在运行时改变变量类型,

go使用的时关键词 var 声明一个变量,自动化初始值是零值

var x int // 初始值 0
var s string // 初始值 “”

当然在函数内部,可以使用简略的 := 方式进行定义变量

func main(){
  x := 1 // 这就是声明x的类型为int,并且初始值为1  
}

当然也可以一次声明多个变量,使用 var ()

var(
   x int
    y float
    z interface{}
   s string
}

在进行多变量赋值的时候,会优先计算所有相关值,然后从左至右依次赋值

data, i := [3]int{0, 1, 2}, 0
i, data[i] = 2, 100  

例如上述动作中,[3]int{}这个就是生成一个长度为3的列表,花括号中放入初始化的值,如果花括号中的值不够,剩余的则用空值填充,3是一个声明列表长度的,如果不写,则默认生成与初始化值相等长度的列表,int是声明列表中的元素类型

data := [3]int{1,2,3}  // [1,2,3]
data := [3]int{1,2}  // [1,2,0]
data := []int{1,2,3}  // [1,2,3]
data := []int{1,2}  // [1,2]

对于后面不用的值,可以使用 _ 来忽略, 为什么呢?因为编译器会将未使用的局部变量当作错误

func ignore()(int, int) {
   return 2, 2
 }

func main(){
    x, _ = ignore()
    ...
}

这样ignore的第二个返回值就会被忽略。

常量使用const来进行定义,常量值必须是编译期可确定的数字/字符串/布尔值, 也就是在定义初期就需要赋值,并且不调用也不会报错

const x = 1

常量中有一个比较优雅的实现递增功能,, 关键字 iota 定义常量组从0开始按行计数自增枚举值,对于有规略递增的常量就可以按这种方法进行使用啦

const (
    x  = iota   // 0    
    y              // 1        
    z              // 2
)    

还有两种值的初始化

b := make([]int, 3) // 这个意思是做一个长度为3,元素为int类型的列表

c := new([]int)  // 这个意思是初始化元素为int的列表,这个返回值是地址也就是&[],这个不支持直接调用c[0]操作

 

对于一般类型,如果无法满足我们的需要,可以进行自定义类型,注意首字母大写,这个struct太有用了,后续会一直用的,因为go中没有类,函数就是一等公民,可以用这个实现跟python中类的效果

type Person struct {
  Name   string
  Age    int
  Sex    string
  Deadth   bool
}

go中如果按照上述方法,定义了Person1与Person2中两个类型,struct体一毛一样,那在go中也是两个不同的类型

go 中的保留字不是很多,语言设计简练,不能白晚投胎

  break     default     func     interface    select
  case      defer       go       map          struct
  chan      else        goto     package      switch
  const     fallthrough if       range        type
  continue  for         import   return       var

以上是关于go 1 --- 基础的主要内容,如果未能解决你的问题,请参考以下文章

你知道的Go切片扩容机制可能是错的

[vscode]--HTML代码片段(基础版,reactvuejquery)

1.6 Go微服务实战(Go语言基础) --- 包和代码测试

为每个片段添加一个操作栏

golang代码片段(摘抄)

go——切片