Go语言-----入门笔记

       由于最近想自学区块链搭建的知识,所以先入门了Go语言,以下是一些笔记,在适当位置会对我比较熟悉的Java语言做一个比较,加深记忆;

一、Go语言的特点

        1. 运行效率高,开发高效,部署简单;

        2. 语言层面支持并发,易于利用多核实现并发;

        3. 内置runtime(作用:性能监控,GC等);

        4.简单易学,丰富的标准库,强大的网络库;

        5.内置强大的工具(gofmt),跨平台编译,内嵌C支持;

二、Go语言的应用

        1.服务器编程,如处理日志,数据打包,虚拟机处理,文件系统等

        2.分布式系统,数据库代理器,中间件等;

        3.网络编程,web应用,Api应用

        4.云平台

三、Go语言命令行工具介绍

      

四、Go语言基础语法

        1. 关键字、标识符、注释、基础结构

Go语言关键字   
breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughtifrangetype
continueforimportreturnvar

 

Go标识符    
appendboolbytecapclosecomplex
complex64complex128uint16copyfalse float32
float64imagintint8int16uint32
int32int64iotalenmakenew
nilpanicuint64printprintlnreal
recoverstringTRUEuintuint8uintprt

 

// 单行注释

/*
多行注释
*/

        2.基础结构详解

//程序第一行一定要package开头,声明所属的包
package main
//导入引用
import "fmt"
//常量定义,类型放在变量名后
const NAME string = "test"
//全局变量的声明与赋值
var a string = "eanam"
//一般类型声明
type TestInt int
//结构声明
type Learn struct{
}
//接口声明
type ILearn interface{
}
//函数定义
func LearnGo() {
}
//main函数
func main() {
}

        3. package的用法

            (1)package是最基本的分发单位和工程管理中依赖关系的体现;

            (2)每个Go语言源代码文件开头都拥有一个package声明,表示源码文件所属的代码包

            (3)要生成Go语言可执行程序,必须要有main的package包,并且该包下有main()函数

            (4)同一个路径下只能存在一个package,一个package可以拆成多个源文件组成

 

        4. import的用法

            (1)import语句可以导入源代码文件所依赖的package包

            (2)不得导入源代码文件中没有用到的package,否则Go语言编译器会报编译错误

//格式1:
import "A"
import "B"

//格式2:
import (
    "A"
    "B"
)

        5. import的原理

            (1)如果一个main导入其他包,包将按顺序导入;

            (2)如果导入的包中有依赖其他包(包B),会首先导入B包,然后初始化B包中的常量和变量,最后如果B包中有init,会自动执行init();

            (3)所有包导入完成后才会对main中常量和变量进行初始化,然后执行main中的init函数(如果存在),最后才执行main函数;

            (4)如果一个包被导入多次则该包只会被导入一次;

        6. import 别名、“.”、“_”

            (1)将导入的包命名为另一个容易记忆的别名;

            (2)“.”的含义是:“.”标识的包导入后,调用该包函数时可以省略前缀包名;

            (3)“_”的含义是:导入该包,但不导入整个包,而是执行该包中的init函数,因此无法通过包名来调用包中的其他函数。使用“_”操作往往是为了注册包内的引擎,让外部可以方便地使用。

//演示
import(
    alias "fmt"    //alias.Print()
    . "fmt"        //Print()
    _ "fmt"        
)

        7. Go语言的数据类型

            (1)数值类型、字符类型和布尔型

数值类型     
整型1uint8无符号8位整型(0到255)
2uint16无符号16位整型(0到65535)
3uint32无符号32位整型(0到4294967295)
4uint46无符号64位整型(18446744073709551615)
5int8有符号8位整型(-128到127)
6int16有符号16位整型(-32768到32767)
7int32有符号32位整型(-2147483648到2147483647)
8int64有符号64位整型
浮点型1float3232位浮点型数
2float6464位浮点型数
3complex3232位实数和虚数
4complex12864位实数和虚数
其他数值类型1byte类似uint8
2rune类似int32
3uint32位或64位
4int与uint一样大小
5uintptr无符号整型用于存放一个指针

            (2)派生类型

派生类型 
指针类型Pointer
数组类型 
结构化类型struct
Channel类型chan
函数类型func
切片类型slice
接口类型interface
Map类型map

            (3)类型零值和类型别名

 A. 类型零值不是空值,而是某个变量被声明后的默认值,一般情况下,值类型的默认值为0,布尔型默认值为 
     false,string默认值为空字符 
   
 B. 我们可以对类型设置别名,如下:
        
        type alias int

 

            (4)类型所占存储大小

 

五、Go语言变量概念

        1. 变量与常量

            

//变量声明:初始化与赋值

/*
单个变量的声明与赋值
1)变量的声明格式:var <变量名称> [变量类型]
2)变量的赋值格式:<变量名称> = <值、表达式、函数等>
3)声明和赋值同时进行:var <变量名称> [变量类型] = <值、表达式、函数等>
4)分组声明格式:
   var(
        i int
        j float32
        name string
   )


同一行声明多个变量和赋值:var a,b,c int = 1,2,3 或者 a,b := 1,2
全局变量的声明必须使用var关键词,局部变量可以省略
特殊变量下划线"_"
*/

/*
变量的类型转换:
1)Go中不存在隐式转换,类型转换必须是显式的;
2)类型转换只能发生在两种兼容类型之间;
3)类型转换格式:<变量名称> [:]= <目标类型>(<需要转换的变量>)
*/

//变量可见性规则
/*
1)大写字母开头的变量的可导出,也就是其他包可以读取的,是公共变量
2)小写字母开头的就是不可导出,是私有变量
*/


//常量:常量声明与iota的使用
/*
1) 常量定义形式:
    显式:const identifier [type]  = value
    隐式:const identifier = value(通常叫无类型常量)
2)常量类型范围
    目前只支持布尔型、数字型(整数型、浮点型和复数)和字符串型;不支持派生类型
3)特殊常量iota的用法
    iota在const关键字出现时将被重置为0
    const组合声明时每增加一行常量声明将使iota计数一次(同一行iota一样)
    iota常见使用法:
        1)跳值使用法

const(
	a = iota
	b = iota
	c int = iota
	_
	//可省略iota
	d
)

        2)插队使用法


const(
	a = iota
	b = iota
	c int = iota
	k = 2.14
	//可省略iota
    d = iota
)


        3)表达式隐式使用法

            如果没有显示赋值,则会继承上一个表达式的右式

        4)单行使用法
*/

六、Go语言运算符

            (1)算术运算符(++、--只能放在变量后面)

            (2)关系运算符

            (3)逻辑运算符

            (4)按位运算符

            (5)赋值运算符

 

七、Go语言控制语句

            (1)条件语句: if-else语句

package main

import "fmt"

func main() {
	a := 2
	if a > 0{
		if a > 3{
			fmt.Println("a > 3")
		}
		fmt.Println("a > 0")
	}else {
		fmt.Println("a < 0")

	}
}

            (2)选择语句:switch语句

package main

import "fmt"

func main() {
	a := 2

	//演示简单匹配
	switch a {
	case 1:
		fmt.Println(" a is 1")

	case 2:
		fmt.Println(" a is 2")

	case 3:
		fmt.Println(" a is 3")

	default:
		fmt.Println(" a is not in range")
	}


	//演示type-switch
	var b interface{}
	b = 3.14
	switch b.(type) {
	case int:
		fmt.Println("b is int")

	case float64:
		fmt.Println("b is float64")

	default:
		fmt.Println("unsuitable type")
	}
}

            (3)循环语句:for语句

package main

import (
	"fmt"
)

func main() {
	
	//无限循环
	for {
		fmt.Println("this is unlinited circle")
	}

	//简单用法
	for i := 0; i < 10;i++{
		fmt.Println("--------",i)
		//time.Sleep(1*time.Second)
	}

	//实现佛reach效果
	a := []string{"banana","peach","apple"}
	for key,value := range a{
		fmt.Println(key,"-",value)
	}
	
}

            (4)goto、break、continue

 

package main

import (
	"fmt"
	"time"
)

func main() {
	var j = 0
	i := 0
	/*
		goto跳到指定步骤
		无限循环打印:this is code 1
	 */
	goto Three
	fmt.Println("demo is start")
	One:
		fmt.Println("this is code 1")
		time.Sleep(1*time.Second)
	goto One

	/*break停止当前循环
		打印两次break demo
	 */

	for {
		fmt.Println("break demo")
		i++
		if i == 2 {
			fmt.Println("doing break")
			break
		}

	}


	/*continue结束本次循环,直接进入下一轮循环
		不打印continue demo2,
	 */
	Three:
	for {
		j++
		if j == 2 {
			fmt.Println("doing continue")
			continue
		}
		fmt.Println("continue demo",j)
		time.Sleep(1*time.Second)

	}
}

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值