Go by Example学习

news2024/12/23 6:26:49

2024.12.21

  • 000
  • array slice
  • map
  • range
  • 函数
  • 结构体
  • 接口

参考资料:
https://gobyexample-cn.github.io/

000

package main

import (
    "fmt"
    "math"
)

const s string = "constant"

func main() {
    fmt.Println("hello world")
    
    var a = "initial"
    fmt.Println(a)
    
    var b, c int = 1, 2
    fmt.Println(b, c)
    
    var d = true
    fmt.Println(d)
    
    var e int 
    fmt.Println(e)
    
    f := "short"
    fmt.Println(f)
    
    fmt.Println(s)
    
    const n = 50000000
    
    const dd = 3e20 / n
    fmt.Println(dd)
    
    fmt.Println(int64(dd))
    
    fmt.Println(math.Sin(n))
    
    i := 1
    for i <= 3 {
        fmt.Print(i)
        i = i + 1
    }
    
    for j := 7; j <= 9; j ++ {
        fmt.Println(j)
    }
    for {
        fmt.Println("loop")
        break
    }
    for n := 0; n <= 5; n ++ {
        if n % 2 == 0 {
            continue
        }
        fmt.Println(n)
    }
    
    if 7 % 2 == 0 {
        fmt.Println("7 is even")
    } else {
        fmt.Println("7 is odd")
    }
    
    if 8 % 4 == 0 {
        fmt.Println("8 is divisible by 4")
    }
    if num := 9; num < 0 {
        fmt.Println(num, "is negative")
    } else if num < 10 {
        fmt.Println(num, "has 1 digit")
    } else {
        fmt.Println(num, "has multiple digits")
    }
    
}

array slice

package main

import (
    "fmt"
    "time"
)

func main() {
    i := 2
    fmt.Print("write ", i, " as ")
    switch i {
    case 1: 
        fmt.Println("one")
    case 2:
        fmt.Println("two")
    case 3:
        fmt.Println("three")
    }
    
    switch time.Now().Weekday() {
    case time.Saturday, time.Sunday:
        fmt.Println("It's the weekend")
    default:
        fmt.Println("It's a weekday")
    }
    fmt.Println(time.Now().Weekday())
    
    t := time.Now()
    switch {
    case t.Hour() < 12:
        fmt.Println("It's before noon")
    default:
        fmt.Println("It's after noon")
    }
    
    whatAmI := func(i interface{}) {
        switch t := i.(type) {
        case bool:
            fmt.Println("I'm a bool")
        case int:
            fmt.Println("I'm an int")
        default:
            fmt.Printf("Don't know type %T\n", t)
        }
    }
    
    whatAmI(true)
    whatAmI(1)
    whatAmI("hey")
    
    var a [5]int
    fmt.Println("emp: ", a)
    
    a[4] = 100
    fmt.Println("set:", a)
    fmt.Println("get:", a[4])
    fmt.Println("len:", len(a))
    
    b := [5]int{1, 2, 3, 4, 5}
    fmt.Println("dcl: ", b)
    // b = append(b, 777)
    // fmt.Println("dcl: ", b)
    
    var twoD [2][3]int
    for i := 0; i < 2; i ++ {
        for j := 0; j < 3; j ++ {
            twoD[i][j] = i + j
        }
    }
    fmt.Println("2d: ", twoD)
    
    // slice
    tt := []string{"g", "h", "i"}
    fmt.Println("len: ", len(tt))
    fmt.Println("dcl:", tt)
    tt = append(tt, "hh")
    fmt.Println("dcl:", tt)
    
    s := make([]string, 4)
    fmt.Println("len: ", len(s))
    fmt.Println("emp:", s)

    s[0] = "a"
    s[1] = "b"
    s[2] = "c"
    fmt.Println("set:", s)
    fmt.Println("len: ", len(s))
    
    mat := make([][]int, 3)
    for i := 0; i < 3; i ++ {
        innerLen := i + 1
        mat[i] = make([]int, innerLen)
        for j := 0; j < innerLen; j ++ {
            mat[i][j] = i + j
        }
    }
    fmt.Println("2d: ", mat)
}

map

package main

import "fmt"

func main() {
    m := make(map[string]int)
    fmt.Println(m)
    
    m["k1"] = 7
    m["k2"] = 13
    fmt.Println("map: ", m)
    
    v1 := m["k1"]
    fmt.Println("v1: ", v1)
    
    fmt.Println("len: ", len(m))
    
    delete(m, "k2")
    fmt.Println("map: ", m)
    
    _, prs := m["k2"]
    fmt.Println("prs:", prs)
    
    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map: ", n)
    
}

range

package main

import "fmt"

func main() {
    nums := []int{2, 3, 4}
    sum := 0
    
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum: ", sum)
    
    for i, num := range nums {
        if num == 3 {
            fmt.Println("index: ", i)
        }
    }
    
    hash := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range hash {
        fmt.Printf("%s -> %s\n", k, v)
    }
    for k := range hash {
        fmt.Println("key: ", k)
    }
    
    for i, c := range "go" {
        fmt.Println(i, c)
        fmt.Printf("%d %c\n", i, c)
    }
}

函数

package main

import "fmt"

func plus (a int, b int) int {
    return a + b
}

func plusPlus (a, b, c int) int {
    return a + b + c
}

func vals() (int, int) {
    return 3, 7
}

// 变参函数
func sum(nums ...int) {
    fmt.Print(nums, " ")
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.Println(total)
}

// 闭包
func intSeq() func() int {
    i := 0
    return func() int {
        i ++
        return i
    }
}

func main() {
    
    res := plus(1, 2)
    fmt.Println(res)
    
    res = plusPlus(1, 2, 3)
    fmt.Println(res)
    
    a, b := vals()
    fmt.Println(a)
    fmt.Println(b)
    
    _, c := vals()
    fmt.Println(c)
    
    sum(1, 2)
    sum(1, 2, 3)
    
    nums := []int{1, 2, 3, 4}
    sum(nums...)
    
    nextInt := intSeq()
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    fmt.Println(nextInt())
    
    newInts := intSeq()
    fmt.Println(newInts())
    
    // 闭包递归, var显式声明
    var fib func(n int) int
    
    fib = func(n int) int {
        if n < 2 {
            return n
        }
        return fib(n - 1) + fib(n - 2)
    }
    
    fmt.Println(fib(7))
    
}
// 指针
package main 

import "fmt"

func zeroval(x int) {
    x = 0
}
func zeroptr(x *int) {
    *x = 0
}

func main() {
    i := 1
    fmt.Println("initial: ", i)
    zeroval(i)
    fmt.Println("zeroval: ", i)
    
    zeroptr(&i)
    fmt.Println("zeroptr: ", i)
    
    fmt.Println("pointer: ", &i)
    
    
}

结构体

package main

import "fmt"

type person struct {
    name string
    age int
}
func newPerson(name string) *person {
    
    p := person{name: name}
    p.age = 42
    return &p
}

type rect struct {
    width, height int
}
// 结构体的方法
func (r *rect) area() int {
    return r.width * r.height
}
func (r rect) perim() int {
    return 2 * r.width + 2 * r.height
}

func main() {
    fmt.Println(person{"Bob", 20})
    fmt.Println(person{name: "Alice", age: 30})

    fmt.Println(person{name: "Fred"})

    fmt.Println(&person{name: "Ann", age: 40})
    
    fmt.Println(newPerson("Jon"))
    
    s := person{name: "Sean", age: 50}
    fmt.Println(s.name)
    
    sp := &s // 指针也可以.访问,自动解引用
    fmt.Println(sp.age)
    
    sp.age = 51 // 可变
    fmt.Println(*sp)
    
    // 结构体的方法
    r := rect{width: 10, height: 5}
    
    fmt.Println("area: ", r.area())
    fmt.Println("perim: ", r.perim())
    
    rp := &r
    fmt.Println("area: ", rp.area())
    fmt.Println("perim: ", rp.perim())
    
}

接口

package main

import (
    "fmt"
    "math"
)

type geometry interface {
    area() float64
    perim() float64
}

type rect struct {
    width, height float64
}
type circle struct {
    radius float64
}
// 实现接口方法即可
func (r rect) area() float64 {
    return r.width * r.height
}

func (r rect) perim() float64 {
    return 2 * r.width + 2 * r.height
}
// 实现接口方法即可
func (c circle) area() float64 {
    return math.Pi * c.radius * c.radius
}

func (c circle) perim() float64 {
    return 2 * math.Pi * c.radius
}

func measure(g geometry) { // 实现类
    fmt.Println(g)
    fmt.Println(g.area())
    fmt.Println(g.perim())
}

func main() {
    r := rect{width: 3, height: 4}
    c := circle{radius: 5}
    
    measure(r)
    measure(c)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache解析漏洞(apache_parsingCVE-2017-15715)

apache_parsing 到浏览器中访问网站 http://8.155.8.239:81/ 我们写一个木马 1.php.jpg 我们将写好的木马上传 会得到我们上传文件的路径 我们访问一下 发现上传成功 发现木马运行成功&#xff0c;接下来使用蚁剑连接我们的图片马 获取 shell 成功 CVE-2013-454 我们还是到…

C++-----函数与库

数学中的函数与编程中的函数对比 数学中的函数 - 数学函数是一种映射关系&#xff0c;例如&#xff0c;函数\(y f(x)x^{2}\)&#xff0c;对于每一个输入值\(x\)&#xff0c;都有唯一确定的输出值\(y\)。它侧重于描述变量之间的数量关系&#xff0c;通常通过公式来表示这种关系…

带着国标充电器出国怎么办? 适配器模式(Adapter Pattern)

适配器模式&#xff08;Adapter Pattern&#xff09; 适配器模式适配器模式&#xff08;Adapter Pattern&#xff09;概述talk is cheap&#xff0c; show you my code总结 适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是面向对象软件设计中的一种结构型设计…

SKETCHPAD——允许语言模型生成中间草图,在几何、函数、图算法和游戏策略等所有数学任务中持续提高基础模型的性能

概述 论文地址&#xff1a;https://arxiv.org/pdf/2406.09403 素描是一种应用广泛的有效工具&#xff0c;包括产生创意和解决问题。由于素描能直接传达无法用语言表达的视觉和空间信息&#xff0c;因此从古代岩画到现代建筑图纸&#xff0c;素描在世界各地被用于各种用途。儿童…

初等函数整理

1.幂函数 2.指数函数 3.对数函数

【C/C++】手搓项目中常用小工具:日志、sqlit数据库、Split切割、UUID唯一标识

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章将写到一些手搓常用工具&#xff0c;方便在项目中的使用&#xff0c;并且在手搓的过程中一些函数如&#xff1a;日志 宏中的__VA_ARGS__接收可变参…

路径规划之启发式算法之二十一:狼群算法(Wolf Pack Algorithm,WPA)

狼群算法(Wolf Pack Algorithm,WPA)是一种模拟狼群捕食行为及其猎物分配方式的群体智能优化算法。它由吴虎胜等人在2013年提出,算法采用了基于人工狼主体的自下而上的设计方法和基于职责分工的协作式搜索路径结构。它通过抽象狼群搜索、围攻以及更新换代的三种行为方式来实…

Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门任务创建【入门二】

继上一篇的hello world&#xff1a; 【Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门hello world输出【入门一】-CSDN博客】 这一篇我们开始任务的创建。 工程还是用上一篇的hello world作为模板&#xff0c;hello world就不再app_main函数中输出&#xff0c;改成在任务…

用音乐与自我对话 ——澄迈漓岛音乐节x草台回声

四季循环&#xff0c;昼夜往复&#xff0c;在相对恒定的日常中&#xff0c;音乐是扇打量世界又内观本心的双向窗户。难以描述的触动&#xff0c;透过音乐语言转换为温热且真实的吟唱&#xff0c;一次又一次记录与释放。 除却生浪主舞台中的声音玩具乐队以及STOLEN秘密行动&…

基础元器件的学习

1、二极管 1.1二极管的符号 ZD是稳压二极管 VD、V、D是普通二极管的符号。 1.2二极管的反向恢复时间 首先交流电为上正下负&#xff0c;然后下正上负。当二极管接到反向电压&#xff0c;二极管存在寄生电容&#xff0c;电压不能立刻突变&#xff0c;当输入频率变高时&#…

HTTP协议及安全防范

由于图片解析问题&#xff0c;可以点击查看 &#x1f449;&#x1f3fb; 博客原文 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;超文本传输协议是一个用于 Web 应用程序通信的应用层协议。它是一种客户端-服务器协议&#xff0c;客户端通过发送请求到服务器来获取…

LabVIEW深海气密采水器测控系统

LabVIEW的深海气密采水器测控系统通过高性价比的硬件选择与自主开发的软件&#xff0c;实现了高精度的温度、盐度和深度测量&#xff0c;并在实际海上试验中得到了有效验证。 项目背景 深海气密采水器是进行海底科学研究的关键工具&#xff0c;用LabVIEW开发了一套测控系统&am…

基于自然语言处理自动分配和高效执行制造任务可提高制造代理的灵活性和适应性

概述 论文地址&#xff1a;https://arxiv.org/abs/2406.01893 本研究提出了一种将大规模语言模型&#xff08;LLMs&#xff09;集成到多代理系统&#xff08;MAS&#xff09;中的新框架&#xff0c;以解决传统制造业在适应动态环境和快速响应生产变化方面所面临的困难。具体来…

使用 acme.sh 申请域名 SSL/TLS 证书完整指南

使用 acme.sh 申请域名 SSL/TLS 证书完整指南 简介为什么选择 acme.sh 和 ZeroSSL&#xff1f;前置要求安装过程 步骤一&#xff1a;安装 acme.sh步骤二&#xff1a;配置 ZeroSSL 证书申请 方法一&#xff1a;手动 DNS 验证&#xff08;推荐新手使用&#xff09;方法二&#xf…

越疆科技营收增速放缓:毛利率未恢复,持续亏损下销售费用偏高

《港湾商业观察》施子夫 12月13日&#xff0c;深圳市越疆科技股份有限公司&#xff08;以下简称&#xff0c;越疆科技&#xff0c;02432.HK&#xff09;发布全球发售公告&#xff0c;公司计划全球发售4000万股股份&#xff0c;其中3800万股国际发售&#xff0c;200万股香港公开…

windows下搭建本地sofa-registry

官方介绍&#xff1a; SOFARegistry 是蚂蚁金服开源的一个生产级、高时效、高可用的服务注册中心。SOFARegistry 最早源自于淘宝的 ConfigServer&#xff0c;十年来&#xff0c;随着蚂蚁金服的业务发展&#xff0c;注册中心架构已经演进至第五代。目前 SOFARegistry 不仅全面服…

「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件

本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息&#xff0c;页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。 关键词 UI互动应用天气预报数据绑定动态展示状态管理 一、功能说明 自定义…

Pytorch | 从零构建MobileNet对CIFAR10进行分类

Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练过程和测试结果…

支付域——清结算系统体系

摘要 本文深入探讨了支付清算的基础知识和跨机构清算原理&#xff0c;涵盖了组织、账户、支付工具和系统的基础&#xff0c;支付流程的模型&#xff0c;以及支付清算的全局实现。文章还详细介绍了支付机构的五大业务和支付系统的总架构&#xff0c;并通过案例分析了支付清算的…

javaEE-线程的常用方法-4

目录 一.start():启动一个线程 调用start()方法 start()方法只能调用一次&#xff1a; java中的API: start()和run()的区别: 二.中断一个线程 中断线程方法1:引入标志位 中断线程方法2:调⽤interrupt()⽅法 抛出的异常: 三.等待一个线程 join() 四、获取线程引用 五…