学习Go语言的第一天

213 阅读6分钟
17.png

一、Go语言安装

一)下载地址

官网:go官网

镜像:go镜像

在Go语言中,GoPath在同一系统上的同一用户,一般规定只有一个,无论这个用户创建多少个go项目,都只有一个GoPath,并且这些项目都放在GoPath下的src目录下。

安装配置完成后在GoPath下创建三个目录:

  • 1.bin (用于存放项目编译后的可执行文件)

  • 2.pkg (用于存放类库文件,比如.a结尾的包模块)

  • 3.src (用于存放项目代码源文件)

二)开发环境的搭建

1.Go SDK

GO中文社区SDK下载地址:https://studygolang.com/dl

我这里使用的是go 1.18.7,因为1.13后才完全支持Module功能。windows图形安装下载这个 https://studygolang.com/dl/golang/go1.14.6.windows-amd64.msi

2.Go的集成软件开发环境

我这里使用的是GoLand(GoLand是JetBrains公司开发的一款集成开发环境(IDE),是专门给Go语言开发者使用的。和IDEA是一家公司,并且大部分IDEA可以用的插件GoLand也可以用的)

二、Go语言基础

一)Go语言的结构模板

//主程序必须是写成main包名
package main

//导入别的类库
import "fmt"    

//全局常量定义
const  num = 10

//全局变量定义
var name string = "米尔大哥"

//类型定义
type P struct {

}

//初始化函数
func init() {

}

//main函数:程序入口
func main() {
fmt.Printf("Hello World!!!");
}

二)Go语言基本数据类型

1.布尔型:关键字【bool】: true   false
2.有符号整形:头一位是代表正负
            int   默认整形   48字节         	 32位或64int8             1字节                     8int16            2字节                     16int32            4字节                     32位
            in64             8字节                     64位
           【int32还是64位取决于操作系统的位数,现在电脑一般都是64位的了,所以一般都是64位】
3.无符号整形
            uint             48字节          	 32位或64uint8             1字节                     8uint16            2字节                     16uint32            4字节                     32uint64            8字节                     644.浮点型
            注:go语言没有float类型,只有float32float64float32           32位浮点数  
            float64           64位浮点数
5.字符串
            string
6. byte     等同uint8,只是类似于一个别名的东西
   rune     等同int32	 只是一个别名,强调表示编码概念对应的数字

三)Go语言引用数据类型

指针 Pointer 
数组 Array[] 
结构体 struct 
进程管道: channel 
函数 func 
切片 slice 
接口 interface 
哈希 map

四)Go语言的变量创建

package main

import(
   //包含print函数
   "fmt"
)
var name string = "米尔大哥"//全局变量
func main() {//函数体内创建的变量为成员变量(局部变量)
   //var  变量名  变量类型 = 变量值
   var name string = "米尔大哥"
   //方法内部可以直接使用 【 变量名 := 变量值 】 赋值,方法外不可以
   name2:="xiao_hong"
   fmt.Println("name = ",name)
   fmt.Println("name2 = ",name2)
}

五)Go语言的常量

go中的常量是指在编译期间就能确定的量(数据),这一点和别的语言有区别,例如java中的常量被赋值一次后就不能修改。

package main

import(
    //包含print函数
   "fmt"
)
func main() {
   //const  常量名  常量类型 = 常量值   显示推断类型
   const name string = "米尔大哥"
   //隐式推断类型
   const name2 ="豆豆"
   fmt.Println("name = ",name)
   fmt.Println("name2 = ",name2)
}

六)Go语言的赋值

Go方法或函数内的赋值符号可以用 := ,也可以用 =,方法外只能用 = 。同时,Go支持多变量返回

package main

import(
   //包含print函数
   "fmt"
)
//方法外只能用 = 赋值 
var my_name string = "my_name" 
var my_name2 = "my_name2" 
//my_name3:="my_name3" 不在方法内,错误
func main() {
    name := "Golang"
   //多变量同时赋值
   var name1,name2 = "米尔大哥","豆豆"
   fmt.Println("name = ",name)
   fmt.Println("name1 = ",name1)
   fmt.Println("name2 = ",name2)
}

七)Go语言丢弃赋值

在Go语言中,变量赋值后必须有方法或者函数去接收,否则编译不通过,这是我们可以用匿名符号_来丢弃赋值

package main

import(
   //包含print函数
   "fmt"
)

func main() {
   //丢弃赋值    把 1和2丢弃 只取3
   //在必须一次取两个以上的值的场景下,又不想要其中一个值的时候使用,比如从map中取key,value
   var _,_,num = 1,2,3
   fmt.Println("num = ",num)
}

八)Go语言的访问权限

在Go语言中,访问权限的默认规范是:某种类型(包括变量,结构体,函数,类型等)的名称定义首字母大写就是在其它包可以访问,首字母非大写,就是只能在自己的程序中访问。

package main

import "fmt"

func main() {
   //这里的P是大写
   //所有调用别的包下的函数,都是首字母大写
   fmt.Printf("aa")
}
//这里的Person的首字母P也是表示外部程序导入该包后可以使用此Person类
type Person struct{

}
//这里的D同上
var Data string = "米尔大哥"

九)Go语言的选择结构

1.if else

package main

import (
   "fmt"
)
func main() {
   /*
      if else分支结构语法格式如下:
         if 条件判断 {
            //代码块
         } else if 条件判断{
            //代码块2
         } else {
            //代码块3
         }
   */

   var num int

   fmt.Printf("请输入数字")
   fmt.Scan(&num)

   if num > 10 {
      fmt.Println("您输入的数字大于10")
   } else if num == 10{
      fmt.Println("您输入的数字等于10")
   } else {
      fmt.Println("您输入的数字小于10")
   }
}

2.switch

package main

import (
   "fmt"
)
func main() {
   var a = "米尔大哥"
   switch a {
   case "米尔大哥":
      fmt.Println("Hello!",a)
   case "豆豆":
      fmt.Println("Hello!",a)
   default:
      fmt.Println("No!")
   }
}

十)Go语言的循环结构

1.for循环

package main

import (
   "fmt"
)

func main() {
   i := 0
   //省略另外两项,相当于java中的while
   for i < 3 {
      i++
   }
   //break用法相同
   for i == 3 {
      fmt.Println(i)
      break
   }
   //return
   for i := 1; i < 10; i++ {
       if i > 5 {
           return
       }
       fmt.Println(i) 
   }
}

2.range循环

package main

import "fmt"

func main() {
   var data [10]int = [10]int{1,2,3,4,5,6,7,8,9,10}
   for  i, num := range data {//i 下标 num :值
      fmt.Println(i,num)
   }
}

十一)Go语言的数组

1.一维数组

package main

import "fmt"
// var 数组名 [数组长度]数组类型  = [数组长度]数组类型{元素1,元素2...}
//全局
var my_arr [6]int
var my_arr_1 [3]int = [3]int{1,2,3}
func main() {
   //方法内:
   this_arr := [2]int{1, 2}
   fmt.Println(my_arr)
   fmt.Println(my_arr_1)
   fmt.Println(this_arr)
}

2.二维数组

package main

import "fmt"
//全局
var my_arr [4][6]int
var my_arr_1 [2][3]int = [...][3]int{{1, 2, 3}, {4, 5, 6}}
func main() {
   //方法内:
   this_arr := [2][3]int{{1, 2, 3}, {8, 8, 8}}
   // 第 2 纬度不能用 "..."。
   this_arr2 := [...][2]int{{1, 1}, {2, 2}, {3, 3}}
   fmt.Println(my_arr)
   fmt.Println(my_arr_1)
   fmt.Println(this_arr)
   fmt.Println(this_arr2)
}

十二)Go语言的指针

Go中有指针的概念指针简单的说就是存储一个【变量地址】的【变量】。
Go中使用指针的方法:
    //*+变量类型 = 对应变量类型的指针类型,&+变量名 = 获取变量引用地址    
        var  指针变量名 *指针变量类型 = &变量名  
    例如:
        var my_point *int = &num
    //通过&+指针变量 = 修改原来的变量真实值
        &指针变量名 = 修改的变量值
    例如:
        &my_point = 100;

示例:

package main

import "fmt"

func main() {
    // 声明实际变量
    var name string="米尔大哥"
    
    // 声明指针变量
    var name_point *string
    
    // 指针变量的存储地址
    name_point = &name
    
    //直接访问变量地址
    fmt.Println("name 变量的地址是:", &name  )//name 变量的地址是: 0x10ae40f0
    
    // 指针变量的存储地址
    fmt.Println("name_point变量储存的指针地址:", name_point )// name_point变量储存的指针地址: 0x10ae40f0
    
    // 使用指针访问值
    fmt.Println("*name_point 变量的值:", *name_point )// *name_point 变量的值: 米尔大哥
    
}