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

一、环境安装

1、安装Go环境

1、官网下载

2、cmd-->go version

3、环境变量

GOROOT:go安装路径

GOPATH:go存放代码的路径

4、GOWorks新建三个文件

5、go env查看配置

2、安装编辑器

GoLand或者VSCode

3、HelloWorld

Go 复制代码
package main //一个程序只有一个main包

import "fmt"

func main(){
    fmt.Println("Hello World!")
}

运行:

Go 复制代码
go run 文件名.go

4、Go命令

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

二、基础语法

1、注释

单行注释 //

多行注释/**/

2、变量定义

Go 复制代码
package main

import "fmt"

func main(){
    var name string ="zhangdan"
    var age int=18
    //定义多个值
    var(

        name string//默认值 空
        age int//默认值 0
    )
    var a,b,c int
    fmt.Println(name)
}
Go 复制代码
package main

import "fmt"

func main(){

    // := 自动推导
    name := "zhangsan"
    var age int
    age=18
    //%T表示打印类型
    fmt.Println("%T",name)

    //%p 表示打印地址 
    fmt.Println("age:%d,内存地址:%p",age,&age)

    age=20
    //地址不会变

}

变量交换

Go 复制代码
package main

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

3、匿名变量

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

Go 复制代码
package main

import "fmt"

func test()(int ,int){
    return 100,200

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

4、常量const

Go 复制代码
package main

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

}

iota 常量计数器

Go 复制代码
func main(){
    const(
        a=iota   //0
        b        //1
        c        //2
        d="hahh" //hahh
        e        //hahh
        f=100    //100
        g        //100
        h=iota   //7
        i        //8
    )
}

5、基本数据类型

布尔、数值、字符串

Go 复制代码
//布尔型 false %t
    var isFlag bool
    fmt.Printf("%T,%t\n",isFlag,isFlag)
// 数值型 整形 0 %d
    uint8 0~255 别名byte
    uint16    rune
    uint32
    uint64
    int8 -127~128
    int16
    int32
    int64    int
    
//数值型 浮点型 0.0 %f
    默认6位小数,%.2f 保留两位小数
    float32 IEEE-754 32位浮点数
    float64 IEEE-754 64位浮点数
    complex64 32位实数和虚数
    complex128 64位实数和虚数
//字符串 string 空 %s
    双引号
    单引号会转为ASCⅡ编码表,unicode编码表,全世界文字,gbk全中国
转义字符 \

类型转换

Go 复制代码
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、基础阶段键盘输入

Go 复制代码
package main

func main(){

    var x int
    var y float64
    
    fmt.Println("请输入一个整数,一个浮点数:")
    fmt.Scanln(&x,&y)
    fmt.Printf("x:%d,y:%f",x,y)
}

8、流程控制

选择结构

Go 复制代码
func main(){
    var a int =15
    if a>0&&a<10{
        fmt.Println("A")    
    }else if a>=10&& a<90{
        fmt.Println("B")
    }else{
     fmt.Println("C")
    }

}
Go 复制代码
var a int=90

switch 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结束穿透

循环结构

Go 复制代码
func main(){
    for i:=1;i<10;i++{
        fmt.Println(i)

    }
}

break结束循环

continue结束当次循环

9、String

Go 复制代码
str:="hello"
//获取长度
    len(str)
//获取指定字节
    fmt.Pirntln(str[0])//104
    fmt.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、可变参数

Go 复制代码
func main(){
    sum:=getSum(1,2,3,4)
}

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

*/

3、值传递与引用传递

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

基础类型、array、struct...

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

切片:可以扩容的数据

map、chan...

4、defer

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

5、函数的数据类型

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

Go 复制代码
func main(){
    fmt.Printf("%T",f1)    //func(int int)
    var f2 func(int,int)
    f2=f1
    f2(1,2)

}
func f1(a,b int){}
相关推荐
用户9385156350713 分钟前
用 AI 结对编程从 0 搭一个"单词后台管理系统":Next.js + Supabase + Drizzle + shadcn/ui 全记录
后端·postgresql·next.js
mqiqe17 分钟前
AgentScope Java 2.0 协议集成全景解析:A2A、AG-UI、Agent Protocol 三大开放协议实战指南
java·开发语言·ui
lzhdim19 分钟前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
脉动数据行情22 分钟前
Java 实现台股 TWSE/TPEx 行情采集(个股 + K 线)
java·开发语言·twse·tpex·台股
爱学习的小邓同学32 分钟前
Golang --- (1)第一个Golang程序
开发语言·后端·golang
zx_741484811 小时前
【Python 入门】面向对象基础:类、对象、成员变量与构造方法
开发语言·python
小灰灰搞电子2 小时前
Rust+Slint 实现的“DNA双螺旋”加载动画源码分享
后端·rust·slint·加载动画
面向Google编程2 小时前
向量库不再囤数据:Milvus 3.0 零拷贝直读数据湖
后端
liangshanbo12153 小时前
虚拟列表深度面试题整理
java·开发语言·前端
ZISHU_9873 小时前
用 TLabel 给 SynTouch BioTac 数据做语义标注:从原始信号到结构化标注
开发语言·人工智能·python·数据·机器人触觉