go语言学习--基础篇

Posted

tags:

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

一,go的数据类型和操作符

      1,布尔类型

            go语言中bool 类型只有两个值:true和false;不像其它语言中0和1 也可以表示布尔类型,这在go语言中是不允许的,另外定义一个bool 类型,默认值为false

            a. var b bool (默认为false)

            b. var b bool = true

            c. var b = true

      2, 操作符

            a. == 等于

            b. != 不等于

            c. !b 取反操作

           d. && 与运算

           e. || 或运算

           布尔类型格式化输出占位符 %t

     3,整数和浮点数类型

           a. int8,int16,int32,int64 (有符号整数类型) 其中数字表示多少位

           b. uint8,uint16,uint32,unit64 (无符号整数类型)

           c. int 和 uint, 和操作系统平台有关

           d. float32 和float64浮点数

      注意:go 语言是强类型语言,其实int类型,不通字节之间也不能直接转化,例如: int8类型的变量,不能直接赋值int16

      所有的整数初始化为0,所有的浮点数初始化为0.0,布尔类型初始化为false

      4,复数类型

           a,两种形式:complex64和complex128

           b,var c complex64 = 5 +10i

           c,内置函数complex(re,im)构造一个复数

          d,万能输出占位符:%v

      5,位操作

          a,与操作:&

            1 & 1 = 1;1 & 0 =0; 0 & 1 = 0;0 & 0 =0

          b,或操作

            1 | 1 = 1;1 | 0 =1;0 | 1 =1;0 & 0 =0

          c, 异或操作

            1 ^1 = 0;1 |0 =1;0 |1 =1; 0 & 0 =1

      6,位操作符

          a. 左移 <<    1<< 10 = 1024

          b. 右移 >>   1024 >> 10 = 1

      7,操作符

          a. 逻辑操作符, ==,!=,<,<=,>=

          b. 算数操作符, +,-,*,、,%

二,go语言代码规范

       1,在go 语言中任何一个代码文件隶属于一个包

       2,import  关键字,引用其他包:

           import("fmt")

           导入多个包
           import (

                 "fmt”

                “os”

            )

         3,同一个包的函数调用,直接调用即可,要是导入其他包,需要加上包的名字+点+函数名称,例如 calc.add,calc 为报名,add 为其中的一个函数

         4,包访问控制规则:

               a.函数名或者变量开头字母大写,意味着这个函数或者变量,可以在其它源码中导入

               b.函数名或者变量开头字符小写,意味着这个函数或者变量,不可以导出,为私有属性

        5,每个源码文件可以含一个init 函数,这个init 函数自动被go运行的框架调用,示例      

package main

import (

     "fmt"
)

func init(){                                  
fmt.Println("init called") } func main() { fmt.Println("main called") #先输出init called,最后输出main called }

 

        6. 包的只初始化,不引用,在go 语言,一般情况下,一个包不引用,是不可以导入的,否则会编译出错,但是也有一种情况是可以导入包的,进行初始化,即在包名前加_

        import (

             _"add"

        )

 三,常量

         1. 常量使用const修饰,而且永远只读,不能修改

         2. const只能修饰boolean,number(int相关类型,浮点数,complex)和string

         3. const的定义 const identifier [type] = value

         4. 多个值定义  const(

                                    a = 1

                                    b = 2

                                    c = 3

                                  )

         5. iota 字const 中的应用 iota 初始值为0,以后定义参数,如果附其它值,按顺序加1,遇到新的const iota 的值重置     

package main

import (

  "fmt"

)

const(

	a = iota
	b
	c
)

const (

	d = iota
	e
)

func main(){

	fmt.Printf("%d,%d,%d,%d,%d",a,b,c,d,e)
}

输出为:0,1,2,0,1

 

           6,在const 赋值中,如果某个变量没有赋值,那么他的值默认为上一个表达式的值

四,go语言中的内置包        

     1.time

func main() {

      now := time.Now()                              #获取当前时间
      second :=now.Unix()                            #将当前时间转化成时间戳

}

 

   2, os

     a. 获取主机名

func main() {

    name,ret := os.Hostname()
    fmt.Printf("%s %v",name.err)
}

    b. 获取GoPATH

func main(){
        val := os.Getenv("PATH")             #os.Getenv 加变量参数
        fmt.Printf("%s\n",val)

}

 五,字符串

   1,字符串声明

         a. var b =string

         b. var b = "hello"

         c. var b string = "hello"

   2.  go 语言的引号

       a. 双引号,“”,可以包含控制字符

       b. 反引号,··,反引号字符都是原样输出

   3. 字符串操作

        a. 长度: len(str)

           示例

func StrOperator() {

      str := "hello world"
      for index,val := range str {

         fmt.Printf("len:%d\n",len(str))
       }
}

        b. 拼接: +,fmt.Sprintf

             str2 :=str + "world"

        c. 分割: string.Split,返回一个数组

str="hello world"
result := strings.Split(str," ")         #已空格分割
fmt.Printf("result"%v\n",result)         #返回结果为数组

        d. 包含: string.Contains

str="hello world"
result := strings.Contains(str,"he")         
fmt.Printf("result"%v\n",result)         #返回true或者false

        e. 前缀或后缀判断: strings.HasPrefix,strings.HasSuffix

str = "baidu.com"
if ret := strings.HasPrefix(str4,"http://"); ret == false {
  
      str4 = "http://" + str
  
}

        f. 子串出现的位置: string.Index(),strings.Lastlndex()

        g. join 操作: string.Join(a[]string,Sep string)

六,流控制语句

      1. if 语句

         if conditionl {

             // do something

         } else if  condition2 {

            // do something

         } else {

        }

   2. if  语法糖

        if b:=100;b> 200 {

           // do something   

        }

    3. for  循环

        a      初始化  condition 修改

         for init;condition;modify { }

        b  无限循环

        for  {   }

        for true {   }

        c  for 遍历字符串,数组,切片

         for  index,val :=range str {

         }

 

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

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

go+系列数组集合基础篇

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

go语言学习--基础篇

Go语言基准测试(benchmark)三部曲之一:基础篇

Go从入门到放弃