首页 > 其他分享 >Go语言24小时极速学习教程(一)基础语法

Go语言24小时极速学习教程(一)基础语法

时间:2024-11-16 13:14:09浏览次数:3  
标签:24 string int fmt Println func Go 极速

Go语言(也称为Golang)是一种由Google开发的编程语言,以其简洁、高效和并发支持而闻名。从本文开始,将带你快速完成Go语言的学习,如果你之前有过Java或者C语言的基础,学习它将很容易,本教程忽略环境搭建步骤,直奔主题。

1. 程序结构

  • 包声明:每个Go程序都从package声明开始,通常是package main
  • 导入包:使用import关键字导入其他包。
  • 函数:使用func关键字定义函数。
  • 主函数:程序的入口点是func main()
package main
import "fmt"
func main() {
    fmt.Println("Hello, World!")
}

2. 变量和常量

  • 变量声明:使用var关键字声明变量,可以指定类型或使用类型推断。
  • 短变量声明:在函数内部可以使用:=进行短变量声明。
  • 常量:使用const关键字声明常量。
var a int = 10
b := 20
const c = 30

3. 数据类型

  • 基本类型:整数int, 浮点float64, 布尔bool, 字符串string
  • 复合类型:数组array, 切片slice, 键值对映射表map, 结构体struct, 接口interface
  • 注意:类型都是写在变量名后面,这和很多其他强类型语言不同
var i int = 10
var f float64 = 3.14
var s string = "Hello"
var b bool = true

4. 控制结构

  • 条件语句if, else if, else
  • 循环语句for循环(Go中没有while循环)。
  • 选择语句switch
if a > b {
    fmt.Println("a更大")
} else if a < b {
    fmt.Println("b更大")
} else {
    fmt.Println("a和b相等")
}

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

switch day {
case 1:
    fmt.Println("今天是星期一")
default:
    fmt.Println("今天不是星期一")
}

5. 函数

  • 函数定义:使用func关键字定义函数,可以有多个参数和返回值。
  • 多返回值:Go支持函数返回多个值,要划重点
  • 匿名函数:可以定义匿名函数并赋值给变量。
func add(x int, y int) int {
    return x + y
}

func swap(x, y string) (string, string) {
    return y, x
}

add := func(x, y int) int {
    return x + y
}

6. 错误处理

  • 错误类型:Go使用error类型来处理错误。
  • 错误返回:函数可以返回error作为最后一个返回值。
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("除数不能为0")
    }
    return a / b, nil
}

7. 并发

  • 协程 Goroutine [ɡəʊruːˈtiːn]:使用go关键字启动一个并发执行的函数,相当于轻量级线程。
  • Channel:使用chan关键字创建通道,用于在Goroutine之间传递数据。
go func() {
    fmt.Println("这是并发运行的")
}()

ch := make(chan int)
go func() {
    ch <- 42
}()
value := <-ch

8. 包和模块

  • :Go程序由包组成,包可以包含多个文件。
  • 模块:使用go mod管理依赖和版本。
import "fmt"
import "math"

9. 指针

  • 指针类型:使用*表示指针类型,使用&获取变量的地址。
var p *int
i := 42
p = &i
fmt.Println(*p) // 输出42

10. 结构体和方法

  • 结构体:使用typestruct关键字定义结构体。
  • 方法:可以为结构体定义方法。
  • 注意:和Java、C#的编写习惯不同,一个结构体的方法并不会把代码写在结构体的定义代码段上,而是类似于挂载的方式挂到结构体上。
type Person struct {
    Name string
    Age  int
}

func (p Person) SayHello() {
    fmt.Printf("你好,我的名字是 %s\n", p.Name)
}

11. 接口

  • 接口定义:使用interface关键字定义接口。
  • 接口实现:类型通过实现接口的方法来满足接口,并非像Java和C#那样显式的声明结构体与接口的依赖关系,所以和上一段的写法没什么本质的区别。
type Speaker interface {
    Speak() string
}

type Dog struct {
    Name string
}

func (d Dog) Speak() string {
    return "旺!"
}

12. 错误处理

  • 错误类型:Go使用error类型来处理错误。
  • 错误返回:函数可以返回error作为最后一个返回值。
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("除数不能为0")
    }
    return a / b, nil
}

13. 标准库

  • fmt:格式化输入输出。
  • math:数学函数。
  • os:操作系统交互。
  • net/http:HTTP客户端和服务器。
fmt.Println("Hello, World!")

14. 注释

  • 单行注释:使用//
  • 多行注释:使用/* ... */
// 这是一个单行注释

/*
这是一个
多行注释
*/

标签:24,string,int,fmt,Println,func,Go,极速
From: https://blog.csdn.net/yry0304/article/details/143815642

相关文章

  • 网络安全(黑客)2024小白自学必看
    ......
  • 【IEEE出版、八大高校联合举办、稳定EI检索】第四届人工智能与智能制造国际研讨会(AIIM
    第四届人工智能与智能制造国际研讨会(AIIM2024)The4thInternationalSymposiumonArtificialIntelligenceandIntelligentManufacturing2024年12月20-22日中国成都重要信息大会官网:www.isaiim.com大会时间:2024年12月20-22日大会地点:中国-成都二轮截......
  • 20222327 2024-2025-1 《网络与系统攻防技术》实验六实验报告
    一、实验内容学习掌握了Metasploit工具的使用,具体的操作总结来说就是Search-Use-Show-Set-Exploit/run学习了利用相关漏洞进行模拟攻击的操作,对防范恶意攻击有了一些认识(安装杀软,不要点击陌生网站、文件链接等)二、实验过程1、前期渗透①主机发现(可用Aux中的arp_sweep,search一......
  • go fiber:发生内部错误时统一返回json格式
    一,文档地址:https://learnku.com/docs/gofiber/2.x/error-handling/11732二,当出错时,使进程不退出1,现象go代码:func(dc*UserController)GetUser(c*fiber.Ctx)error{ varzint=0 variint=100/z fmt.Println("i:%i",i) //处理获取用户的逻辑 returnc.Sen......
  • go fiber: controller返回json格式
    一,代码:1,controller/articleController.gopackagecontrollerimport( "github.com/gofiber/fiber/v2" "industry/config")typeArticleControllerstruct{}funcNewArticleController()*ArticleController{ return&ArticleController{......
  • go fiber:使用独立的routes文件组织controller
    一,go代码:controller/articleController.gopackagecontrollerimport"github.com/gofiber/fiber/v2"typeArticleControllerstruct{}funcNewArticleController()*ArticleController{ return&ArticleController{}}func(dc*ArticleController)......
  • go mod: 配置代理
    一,安装第三方库时报错:没添加代理时,会报错超时错误#goget-ugithub.com/gofiber/fiber/v2go:modulegithub.com/gofiber/fiber/v2:Get"https://proxy.golang.org/github.com/gofiber/fiber/v2/@v/list":dialtcp142.250.217.81:443:i/otimeout 二,解决:编辑/e......
  • go fiber:全局中间件添加排除的path
    一,代码:全局中间件对所有的api生效,如果有个别不想应用全局中间件的api,则需要从代码中进行排除:例如:支付宝或微信的回调接口packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2""regexp")funcApiSign(c*fiber.Ctx)error{//得到当前url ......
  • go fiber: 把异常信息写到错误日志中
    一,代码:1,userBusiness.gopackagebusinessimport("fmt")//得到多个用户,按分页返回funcGetUserList(pageint,pageSizeint)(string,error){b:=0a:=100/bfmt.Println(a)return"1,2,3",nil}代码中包含有除0错,会引发panic2,userControlle......
  • golang: 在线上用nginx部署应用
    一,启动应用:1,编译程序$gobuild2,用nohup启动应用的二进制程序$nohup/data/goapp/industry/industry>>/data/logs/gologs/back.log2>&1&[1]48963,检查应用是否启动:$ss-lntp|grep3000LISTEN040960.0.0.0:30000.0.0.0:*users:(("......