当前位置: 首页 > news >正文

GO语言快速入门(比较乱)

一、环境安装

1、安装Go环境

1、官网下载

2、cmd-->go version

3、环境变量

GOROOT:go安装路径

GOPATH:go存放代码的路径

4、GOWorks新建三个文件

5、go env查看配置

2、安装编辑器

GoLand或者VSCode

3、HelloWorld

package main //一个程序只有一个main包import "fmt"func main(){fmt.Println("Hello World!")
}

运行:

go run 文件名.go

   

4、Go命令

修改环境值:go   env -w 字段=""

 二、基础语法

1、注释

单行注释 //

多行注释/**/

2、变量定义

package mainimport "fmt"func main(){var name string ="zhangdan"var age int=18//定义多个值var(name string//默认值 空age int//默认值 0)var a,b,c intfmt.Println(name)
}

package mainimport "fmt"func main(){// := 自动推导name := "zhangsan"var age intage=18//%T表示打印类型fmt.Println("%T",name)//%p 表示打印地址 fmt.Println("age:%d,内存地址:%p",age,&age)age=20//地址不会变}

变量交换

package mainfunc main(){var a int=100var b int =200//交换a,b的值b,a=a,b
}

3、匿名变量

_ 空白标识符,任何赋给这个标识符的值将被抛弃

package mainimport "fmt"func test()(int ,int){return 100,200}
func main(){a,_:=test()_,b:=test()fmt.Println(a,b)
}
//匿名变量不占用内存空间,不会分配内存

4、常量const

package mainfunc main(){//不能被修改,相当于finalconst URL string ="www.baidu.com"//显式定义const URL2="www.google.com"//隐式定义const a,b,c=3.14,"abc",false//同时定义多个}

 iota 常量计数器

func main(){const(a=iota   //0b        //1c        //2d="hahh" //hahhe        //hahhf=100    //100g        //100h=iota   //7i        //8)
}

5、基本数据类型 

     布尔、数值、字符串   

//布尔型 false %tvar isFlag boolfmt.Printf("%T,%t\n",isFlag,isFlag)
// 数值型 整形 0 %duint8 0~255 别名byteuint16    runeuint32uint64int8 -127~128int16int32int64    int//数值型 浮点型 0.0 %f默认6位小数,%.2f 保留两位小数float32 IEEE-754 32位浮点数float64 IEEE-754 64位浮点数complex64 32位实数和虚数complex128 64位实数和虚数
//字符串 string 空 %s双引号单引号会转为ASCⅡ编码表,unicode编码表,全世界文字,gbk全中国
转义字符 \

类型转换

a:=3 //int
b:=5.0 //float64
//将int类型的a转换为float64类型
c:=float64(a)

 整形不能转为布尔

6、运算符

算术运算符

        +、-、*、/、%、++(自增)、-- 

关系运算符

        ==、>、<、>=、<=、!=

逻辑运算符

        && 、||、!

位运算符

        &        位与,都是1,结果位1

        |        位或,都是0,结果为0

        ^        位异或,不同为1

        &^        位清空,a&^b,对于b上数值,如果为0,则取a对应位数值,为1,取0

        <<        左移,高位丢弃,低位补0,乘以2的n次方

        >>        右移,地位丢弃,高位补0,除以2的n次方

 7、基础阶段键盘输入

package mainfunc main(){var x intvar y float64fmt.Println("请输入一个整数,一个浮点数:")fmt.Scanln(&x,&y)fmt.Printf("x:%d,y:%f",x,y)
}

8、流程控制

选择结构

func main(){var a int =15if a>0&&a<10{fmt.Println("A")    }else if a>=10&& a<90{fmt.Println("B")}else{fmt.Println("C")}}
var a int=90switch a{case 90:fmt.Println("A")
case 80:fmt.Println("B")
case 50,60,70:fmt.Println("C")
default:fmt.Println("D")
}
switch默认匹配成功后不会执行其他case,如果需要执行其他case,可以使用fallthrough穿透case,break结束穿透

循环结构

func main(){for i:=1;i<10;i++{fmt.Println(i)}
}

        break结束循环

        continue结束当次循环

9、String

str:="hello"
//获取长度len(str)
//获取指定字节fmt.Pirntln(str[0])//104fmt.Printf("%c",str[0])//h
//字符串是一个个字符拼接而成//for range循环 循环遍历数组、切片....
for i,v :=range str{fmt.Print(i) //下标fmt.Printf("%c",v)//值}

  

三、函数

 1、定义

func funcName(param paramType)(returnType){

}

2、可变参数

func main(){sum:=getSum(1,2,3,4)
}func getSum(nums...int)(int){sum:=0for i:=0;i<len(nums);i++{sum+=nums[i]}return sum
}
/*
注意:可变参数要放在列表最后一个函数参数列表中最多一个可变参数*/

 3、值传递与引用传递

值传递:传递的是数据的副本,修改数据对原数据没影响

        基础类型、array、struct...

引用传递:传递的是地址,修改数据对原数据有影响

        切片:可以扩容的数据

        map、chan...

 4、defer

defer会将函数延迟到最后执行,多条defer入栈执行。

5、函数的数据类型

 func() 本身就是一个数据类型

func main(){fmt.Printf("%T",f1)    //func(int int)var f2 func(int,int)f2=f1f2(1,2)}
func f1(a,b int){}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Ansible变量与模板的高级使用技巧
  • 2024 RustChinaConf 赞助商介绍
  • 线程可见性问题?还是编译优化问题?
  • golang fmt.Printf中 %q
  • 【React】Vite 构建 React
  • Zustand 状态调试以及持久话
  • SpringBoot与Minio的极速之旅:解锁文件切片上传新境界
  • pytorch torch.matmul函数介绍
  • 基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例
  • 【redis】redis的特性和主要应用场景
  • 码上君量化互助社群介绍
  • javascript嵌套循环
  • 使用shell脚本安装mysql8,进行主从备份配置
  • route-forward springboot实现路由转发程序
  • 系统架构师-ERP+集成
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • canvas 高仿 Apple Watch 表盘
  • Docker入门(二) - Dockerfile
  • JavaScript 基础知识 - 入门篇(一)
  • javascript从右向左截取指定位数字符的3种方法
  • js写一个简单的选项卡
  • LeetCode18.四数之和 JavaScript
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 搭建gitbook 和 访问权限认证
  • 技术胖1-4季视频复习— (看视频笔记)
  • 力扣(LeetCode)357
  • 日剧·日综资源集合(建议收藏)
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 使用SAX解析XML
  • 试着探索高并发下的系统架构面貌
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • # SpringBoot 如何让指定的Bean先加载
  • #include
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (Charles)如何抓取手机http的报文
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (回溯) LeetCode 78. 子集
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (十三)MipMap
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (转)socket Aio demo
  • (转载)Linux 多线程条件变量同步
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .a文件和.so文件
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net 无限分类
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @Service注解让spring找到你的Service bean
  • @SuppressLint(NewApi)和@TargetApi()的区别