GO语言随笔(一)

GO语言随笔(一)
对比C/C++的不同语法。
Go中文网在线标准库文档:https://studygolang.com/pkgdoc

1.基础部分

1. GO语言特点

  1. GO具有静态编语言的安全和性能,也具有动态语言维护的高效率;GO=C+Python

  2. GO引入了包的概念,用于组织程序结构,GO语言的每一个文件都要归属于一个包,而不能单独存在;

  3. GO有自己的垃圾回收机制,内存自动回收,弥补C/C++的缺点;

  4. 天然的并发(到此暂未看)重点;
    (1). 从语言层面支持并发,实现简单;
    (2). goroutine,轻量级线程,可实现大并发操作,高校利用多核;
    (3). 基于CSP并发模型;

  5. 函数可以返回多个值,类似python;

  6. 吸收了管道通信机制,形成GO语言特有的管道channel。

2.GO执行流程

  1. 先对源码编译,再执行流程。
    在这里插入图片描述
  2. 对源码直接执行
    在这里插入图片描述

3.GO语言注意事项

  1. GO源文件以“go”为扩展名;

  2. GO代码不需要“;”结尾;

  3. Go语言定义的变量或者import的包如果没有使用到,则代码编译不会通过;

  4. Go的注释,同C++

  5. 代码风格:"{"不可换行

    此写法正确

    func main{
    	//执行语言
    }
    

    此写法错误

    func main
    { // 此”{“不可换行
    	//执行语言
    }
    
  6. Go的变量名、函数名、常量名 采用驼峰法,xxxYyyZzz

  7. Go中没有 ++i 和 --i 的操作,且 i++ 和 i-- 智能单独使用。

4.变量

变量 = 数据类型 + 值 + 变量名

变量的三种使用方法:

  1. 指定变量类型,声明后不赋值,使用默认值;

    var i int //此时i不赋值,则i使用默认值,int默认值为0
    
  2. 根据值自行判断类型(类型推导);

    var d  =10.11 //根据值10.11推断d为float类型
    
  3. 省略var ,用”:=“,意为声明并赋值;

    i:=10 //声明变量i并赋值为10
    

    补充:多变量声明

    i,d,name:=1,10.11,"wjq" //同时声明三个变量并赋值
    

查看数据类型和所占内存大小

	n := 10.11 
	fmt.Printf("类型 %T,占用内存大小%d",n,unsafe.sizeof(n))
	// Printf() 格式化输出
	// %T 类型输出,%d 大小输出
	// unsafe.sizeof()

5.数据类型

GO的数据类型

在这里插入图片描述

数据类型补充点:

  1. Go没有专门的字符类型(char),一般使用byte来代替,也可用int类型;

    //例一:
    var c byte  = ’a‘ 
    fmt.Println(c) //输出’a‘的ASCII的码值
    fmt.Printf("%c",c)//输出字符 a。格式化输出:Printf + %c
    
    //例二
    var c2 int ='中' //当字符的ASCII的码值>255,可考虑用int类型保存
    fmt.Println(c) //输出’a‘的ASCII的码值
    fmt.Printf("%c",c)//输出字符 a。格式化输出:Printf + %c
    
    
  2. string类型说明
    (1). 因Go中没有专门的字符类型,而字符串是一串固定长度连接起来的字符序列,所以Go的string是由字节组成的。
    (2).字符串一旦赋值,字符串则不能修改;

    var str="hello"
    str[0]='a' //错误,不可修改
    

    (3). 字符串拼接 ”+“

    str:="hello" + "world" //str=hello world"
    
  3. Go的编码统一使用UTF-8,所以不存在编码乱码的情况。

6.类型转换

(1). 基础类型转换

	go的类型转换必须是显示转换,go中不存在类型的自动转换。其语法T(v),T为数据类型,v为值。
     var i int32 = 100
     var n1 float32 = float(i) //将i转为float32类型

(2). string转基本类型

strconv包的函数
在这里插入图片描述
注:此组函数返回值有两个(value ,error)
例:

var str string = "true"
var str string = "123"
var b bool
var n int
b,_ = strconv.ParseBool(str) // 此处只获取value
n,_ = strconv.ParseInt(str,10,64) // 10 十进制;64 位数

(3). 基本类型转string

方式一
func.Sprintf("%参数",表达式) //此函数根据参数生成格式化的字符串并返回该字符串。

例;

var num1 int = 90
var str string
str = fmt.Sprintf("d",num1) // 转换为string类型
方式二

strconv包函数
在这里插入图片描述
例:

var num1 int = 90
var str string 
str = strconv.FormatInt(num1,10) //将num1转为string类型

7.指针 类似C/C++

8.分支结构 类似C/C++

if分支结构

// 结构一
if 条件表达式 { //此”{“必须在此行
	//执行语句
} 

//结构二
if 条件表达式{
   //执行语句
}else{ // else{必须在此行
   //执行语句
}

//结构三
if 条件表达式1{
	//执行语句1
}else if 条件表达式2{
	//执行语句2
}
......
else{
	//执行语句n
}

switch分支结构

switch 表达式{
	case 条件11,条件12...:
		//执行语句1
	case 条件21,条件22...:
		//执行语句2
		......
	case 条件31,条件32...:
		//执行语句n
	default:
		//执行语句n+1
}

注:

  1. Go的每个执行语句后,不用加break,不同于C/C++;

  2. switch的穿透 fallthrough,默认只能穿透一次;
    例:

    	var num =10
    	switch num{
    	case 10:
    		fmt.Println("l1")
    		fallthrough
    	case 20:
    		fmt.Println("l2")
    		fallthrough
    	default:
    		fmt.Println("other")
    	}
    

9.循环结构

Go中只有for循环,while和 do while 结构可用while代替。

结构

(1) .结构一
for 循环变量初始化;循环条件;循环变量迭代{
//循环操作
}

for i:=0;i<10;i++{
	fmt.Println("hello world")
}

(2).结构二 (似while)
for 循环条件 {
//循环操作
}

var i=0
for i<10{
	fmt.Println("hello world")
	i++
}

(3).死循环 (与break结合使用)
for {
//循环操作
}
(4).for-range方式

str := "hello"
for index,val != range str{
	fmt.Printf("index=%d,value=%c",index,val)
}

10. 函数

基础语法
在这里插入图片描述

11.包

go是以包的形式来管理文件和项目目录结构的。

包的作用:

  • 区分相同名字的函数、变量等标识符;
  • 当程序文件很多时,可以很好的管理项目;
  • 控制函数、变量等的作用域。

注:为了让其他包的文件,可以访问到本包的函数,则该函数名的首字母需要大写,类似C/C++的public权限,才能实现跨包访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值