Go语言学习笔记

语言结构

基础结构

1
2
3
4
5
6
7
8
package main

import "fmt"

func main() {
/* 这是我的第一个简单的程序 */
fmt.Println("Hello, World!")
}

注意:{ 不能单独放在一行

  • 必须在源文件中非注释的第一行指明这个文件属于哪个包
  • import 导入包
  • main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。
  • Print 和 Println 输出
  • 当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Group1,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 protected )。

执行 Go 程序

1
$ go run hello.go

基础语法

  • 一行代表一个语句结束,不需要以分号 ; 结尾,多个语句写在同一行则必须使用 ; 区分。
  • // 单行注释。 /* */多行注释 。

数据类型

布尔
数字
字符串
派生类型

语句变量

:= 赋值操作符

注意::=左侧的变量不应该是已经声明过的,否则会导致编译错误。

1
v_name := value

值类型和引用类型

  • 值类型
    int、float、bool 和 string 这些基本类型都属于值类型,使用这些类型的变量直接指向存在内存中的值。
    当使用等号 = 将一个变量的值赋值给另一个变量时,如:j = i,实际上是在内存中将 i 的值进行了拷贝。
    可以通过 &i 来获取变量 i 的内存地址,每次的地址都可能不一样。
    值类型的变量的值存储在栈中。
    内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机器可能有不同的存储器布局,并且位置分配也可能不同。

  • 引用类型
    一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。这个内存地址为称之为指针,这个指针实际上也被存在另外的某一个字中。
    同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。
    当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。
    如果 r1 的值被改变了,那么这个值的所有引用都会指向被修改后的内容,在这个例子中,r2 也会受到影响。

-------------本文结束感谢您的阅读-------------