go语言学习教程

先来一个最简单的例子

package main     包声明,知名这个文件属于哪个包

import "fmt"    fmt包实现了格式化IO(输入/输出)的函数

func main() {   (main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数))
   /* 这是我的第一个简单的程序 */
   fmt.Println("Hello, World!")
}

1.变量声明  

第一种,指定变量类型,声明后若不赋值,使用默认值。
     var a int =10
第二种,根据值自行判定变量类型。    
     var b = 10
第三种,省略var, 注意 :=左侧的变量不应该是已经声明过的,否则会导致编译错误。
        c := 10
(注意,第三种声明一定要写在输出函数里)

2.输出

卸载输出函数中的必须输入(局部函数声明必须使用),不然报错,在输出函数外写的全局变量,可以声明并不使用

var a int = 10
var b = 12.5
var e,f = 123, "hello"
func main(){
  c := "shangtian"
  println(a,b,e)//报错,c声明但没使用
}

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

在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1。

iota 可以被用作枚举值: 

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

可以简写为如下形式:

const (
    a = iota
    b
    c
)
func main() {
    const (
            a = iota   //0
            b          //1
            c          //2
            d = "ha"   //独立值,iota += 1
            e          //"ha"   iota += 1
            f = 100    //iota +=1
            g          //100  iota +=1
            h = iota   //7,恢复计数
            i          //8
    )
    fmt.Println(a,b,c,d,e,f,g,h,i) // 0,1,2,ha,ha,100,100,7,8
}
func main(){
  const(
    i = 1 << iota // iota 是 0,左移0位,1乘2的0次方
    j = 3 << iota // Iota是 1,左移1位,3×2的1次方
    k
    l
  )
  println(i,j,k,l)//1,6,12,24
}

4.运算符

(1)<<

  左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0

(2)>>

  右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。

 5.Go语言函数

  函数是基本的代码块,用于执行一个任务。Go 语言最少有个 main() 函数。  

package main

import "fmt"

func main() {
   /* 定义局部变量 */
   var a int = 100
   var b int = 200
   var ret int
   /* 调用函数并返回最大值 */
   ret = max(a, b)

   fmt.Printf( "最大值是 : %d
", ret )
}

/* 函数返回两个数的最大值 */
func max(num1, num2 int) 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)
}

6.Go 语言变量

 Go 语言程序中全局变量与局部变量名称可以相同,但是函数内的局部变量会被优先考虑

package main

import "fmt"

/* 声明全局变量 */
var g int = 20

func main() {
   /* 声明局部变量 */
   var g int = 10

   fmt.Printf ("结果: g = %d
",  g) // 10
}

 7.声明数组

  初始化数组

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 

  初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

 如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
8.Go 指针
func main() {
   var a int= 20   /* 声明实际变量 */
   var ip *int        /* 声明指针变量 */

   ip = &a  /* 指针变量的存储地址 */

   fmt.Printf("a 变量的地址是: %x
", &a  )

   /* 指针变量的存储地址 */
   fmt.Printf("ip 变量储存的指针地址: %x
", ip )

   /* 使用指针访问值 */
   fmt.Printf("*ip 变量的值: %d
", *ip )
}
Go 空指针
  当一个指针被定义后没有分配到任何变量时,它的值为 nil。
package main

import "fmt"

func main() {
   var  ptr *int

   fmt.Printf("ptr 的值为 : %x
", ptr  )
}


原文地址:https://www.cnblogs.com/SunShineM/p/7093322.html