Go语言学习

栏目: Go · 发布时间: 5年前

内容简介:Go语言的基础组成有一下几个部分:例子:数据类型用于声明函数和变量。

一、 GO 语言结构

Go语言的基础组成有一下几个部分:

  • 包声明
  • 引入包
  • 函数
  • 变量
  • 语句和表达式
  • 注释

例子:

//定义包名
package main

//引入fmt包
import "fmt"

//定义函数, main为入口函数
func main() {
   /* 这是我的第一个简单的程序,我是注释 */
   fmt.Println("Hello, World!")
}

二、Go基础语法

  • 行分隔符:一行代表一个语句结束,无需;号结尾
  • 注释:单行//,多行/**/
  • 标识符关键字:标识符用来命名变量、类型等程序实体,第一个字符必须是字母或下划线而不能是数字
  • 关键字: 25 个关键字或保留字
    Go语言学习 36 个预定义标识符
    Go语言学习
  • 空格:声明必须使用空格隔开,变量与运算符间加入空格,程序看起来更加美观

1.数据类型

数据类型用于声明函数和变量。

数据类型的出现是为了 把数据分成所需内存大小不同的数据 ,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。

Go按类别划分有以下集中数据类型:

  • 布尔型(BOOL)

布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。

  • 数字类型

整型 int 和浮点型 float32、float64.

整型包含:

Go语言学习

浮点型:

Go语言学习

其他数字类型

Go语言学习
  • 字符串类型

字符串就是一串固定长度的字符连接起来的字符序列。

Go 的字符串是由单个字节连接起来的,字节使用 UTF-8 编码标识 Unicode 文本。

  • 派生类型
    • 指针类型(Pointer)
    • 数组类型
    • 结构化类型(struct)
    • Channel类型
    • 函数类型
    • 切片类型
    • 接口类型(interface)
    • Map类型

2.变量

变量名由字母、数字、下划线组成,其中首个字符不能为数字

申明变量的三种格式:

  • 指定变量类型,声明后若不赋值,使用默认值
var v_name v_type
v_name = value
  • 根据值自行判定变量类型: var v_name = value
  • 省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误
v_name := value
例如
x := 10

多变量声明

var vname1, vname2, vname3 type
vname1, vname2, vname3 = v1, v2, v3

//和 python 很像,不需要显示声明类型,自动推断
var vname1, vname2, vname3 = v1, v2, v3 

//出现在:=左侧的变量不应该是已经被声明过的,否则会导致编译错误
vname1, vname2, vname3 := v1, v2, v3 

// 这种因式分解关键字的写法一般用于声明全局变量
var (
    vname1 v_type1
    vname2 v_type2
)

局部变量声明后如果没有使用编译时会报错。

3.常量

常量是一个简单值的标识符,在程序运行时,不会被修改的量。

常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。

  • 定义常量的格式: const identifier [type] = value
- 显式类型定义: const b string = "abc"
- 隐式类型定义: const b = "abc"

例如
const LENGTH int = 10 
const WIDTH = 10
  • 常量可以用作枚举,例如:
const (
    Unknown = 0
    Female = 1
    Male = 2
)
  • 常量可以用函数(必须是内置函数)计算表达式的值,例如len(), cap(), unsafe.Sizeof()等函数。
package main

import "unsafe"
const (
    a = "abc"
    b = len(a)
    c = unsafe.Sizeof(a)
)

func main(){
    println(a, b, c)
}
  • iota常量

    特殊常量,可以认为是一个可以被编译器修改的常量

    iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的 行索引 )

用作枚举值:

const (
    a = iota //0
    b = iota //1
    c = iota //2
)
可简写
const (
    a = iota
    b
    c
)

4.运算符

  • 算术运算符

    假定 A 值为 10,B 值为 20

    Go语言学习
  • 关系运算符

    假定 A 值为 10,B 值为 20。

    Go语言学习
  • 逻辑运算符

    假定 A 值为 True,B 值为 False

    Go语言学习
  • 位运算符

位运算符对整数在内存中的二进制位进行操作,假定 A 为60,B 为13

Go语言学习

注意右移n位时除以2的n次方对负数无效。

下表列出了位运算符 &, |, 和 ^ 的计算:

Go语言学习

假定 A = 60; B = 13; 其二进制数转换为:

Go语言学习
  • 赋值运算符

    Go语言学习
  • 其他运算符

    Go语言学习
    package main
    
    import "fmt"
    
    func main() {
       var a int = 4
       var b int32
       var c float32
       var ptr *int
    
       /* 运算符实例 */
       fmt.Printf("第 1 行 - a 变量类型为 = %T\n", a );
       fmt.Printf("第 2 行 - b 变量类型为 = %T\n", b );
       fmt.Printf("第 3 行 - c 变量类型为 = %T\n", c );
    
       /*  & 和 * 运算符实例 */
       ptr = &a    /* 'ptr' 包含了 'a' 变量的地址 */
       fmt.Printf("a 的值为  %d\n", a);
       fmt.Printf("*ptr 为 %d\n", *ptr);
    }
    
  • 优先级

有些运算符拥有较高的优先级,二元运算符的运算方向均是从左至右.下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低

Go语言学习

可以通过使用括号来临时提升某个表达式的整体运算优先级

5.条件语句

条件语句的结构:

Go语言学习

GO提供以下条件判断语句

Go语言学习

if…else, switch例句

if a < 20 {
    /* 如果条件为 true 则执行以下语句 */
    fmt.Printf("a 小于 20\n" );
} else {
    /* 如果条件为 false 则执行以下语句 */
    fmt.Printf("a 不小于 20\n" );
}

switch {
   case grade == "A" :
      fmt.Printf("优秀!\n" )     
   case grade == "B", grade == "C" :
      fmt.Printf("良好\n" )      
   case grade == "D" :
      fmt.Printf("及格\n" )      
   case grade == "F":
      fmt.Printf("不及格\n" )
   default:
      fmt.Printf("差\n" );
}

select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。

select随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。

6.循环语句

循环程序的流程图

Go语言学习

for在go语言中3种形式

  • for init; condition; post { }
  • for condition { }
  • for { }

init: 一般为赋值表达式,给控制变量赋初值;

condition: 关系表达式或逻辑表达式,循环控制条件;

post: 一般为赋值表达式,给控制变量增量或减量。

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:

for key, value := range oldMap {
    newMap[key] = value
}

for使用实例:

package main

import "fmt"

func main() {

   var b int = 15
   var a int

   numbers := [6]int{1, 2, 3, 5} 

   /* for 循环 */
   for a := 0; a < 10; a++ {
      fmt.Printf("a 的值为: %d\n", a)
   }

   for a < b {
      a++
      fmt.Printf("a 的值为: %d\n", a)
   }

   for i,x:= range numbers {
      fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
   }   
}

7.函数

函数是基本的代码块,用于执行一个任务,go程序最少有一个main()函数

  • 函数定义:
func function_name( [parameter list] ) [return_types] {
   函数体
}

func:函数由 func 开始声明
function_name:函数名称,函数名和参数列表一起构成了函数签名。
parameter list:参数列表,参数就像一个占位符,当函数被调用时,你可以将值传递给参数,这个值被称为实际参数。参数列表指定的是参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。有些功能不需要返回值,这种情况下 return_types 不是必须的。
函数体:函数定义的代码集合。

实例:

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 声明局部变量 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}
  • 函数调用、返回多值
package main

import "fmt"

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Mahesh", "Kumar")
   fmt.Println(a, b)
}

赞赏那是不存在的~

Go语言学习 支付宝

Go语言学习 微信


以上所述就是小编给大家介绍的《Go语言学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Essential C++中文版

Essential C++中文版

[美] Stanley B. Lippman / 侯捷 / 华中科技大学出版社 / 2001-8 / 39.80元

书中以4个面向来表现C++的本质:procedural(程序性的)、generic(泛型的)、object-based(个别对象的)、object-oriented(面向对象的),全书围绕着一系列逐渐繁复的程序问题,以及用以解决这些问题的语言特性。循此方式,读者不只学到C++的函数和结构,也会学习到它们的设计目的和基本原理。一起来看看 《Essential C++中文版》 这本书的介绍吧!

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具