当前位置: 首页 > 资讯 >

Golang快速入门-2(Day5)

那就接续着昨天的内容,今天提到的也是大家常用的function及slice

function

go在宣告function的方式如下
func <function名称> (<引入的变数名称> <引入的变数类别>) (<回传变数(选填)> <回传类别>) {
// 做一些事
}

package main

import "fmt"

func printHelloWorld() {
    fmt.Println("Hello World")
}

func printSomeThing(input1 string) {
    fmt.Println("output", input1)
}

func addSomething(input string) string {
    return input + "!!!"
}

func main() {
    printHelloWorld()
    printSomeThing("this is output")
    var x string
    x = addSomething("Good")
    fmt.Println(x)
}

但在go的function中,除了引入的变数的可以是0~很多个,输出也可以0~很多个,范例如下

package main

import "fmt"

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

func main() {
    var a string
    var b string
    a, b = swap("hello", "world")
    fmt.Println(a, b)
}


另外,在go的function中,还有一个特别的用法,可以在回传的变数那边先打上预设想要回传的内容,他就会在function的最一开始帮你宣告好这几个变数,之後只要在function中打上return即可,当然如果你接下来还是有内容想要回传,也可以不受这个限制影响,只要型态是一样的就可以了

package main

import "fmt"

func swap(x string, y string) (output1 string, output2 string) {
	output1 = y
    output2 = x
    if x == "foo" {
        return "bar", "bar"
    }
    return
}

func main() {
    var a string
    var b string
	a, b = swap("hello", "world")
	fmt.Println(a, b)
    a, b = swap("foo", "world")
	fmt.Println(a, b)
}

defer
这是golang的特别功能,主要的功能是当你使用了这个语法,他就会将他後面的内容挪到你的function执行结束後才会执行(顺序为由下往上的执行)

func testDefer() {
    defer fmt.Println("1")
    defer fmt.Println("2")
    defer fmt.Println("3")
    defer fmt.Println("4")
    defer fmt.Println("5")
    fmt.Println("Hello")
}
testDefer()

输出结果

Hello
5
4
3
2
1

Slice

Slice是golang独有的资料型态,可以先把它视为可以扩充的array
他的用法如下


// 宣告
var peopleNames []string 
var peopleSex []string = []string{"male","female"}
peoplePhoneNumber := []string{"0912345678","0987654321"}

fmt.Println("peopleSex", peopleSex)
fmt.Println("peoplePhoneNumber", peoplePhoneNumber)
// 将资料放到slice
fmt.Println("peopleNames", peopleNames)
peopleNames = append(peopleNames, "Peter")
fmt.Println("peopleNames", peopleNames)
peopleNames = append(peopleNames, "John", "Eric")

// 取得slice有几个值(length)

fmt.Println("peopleNames len", len(peopleNames))

// 取其中的值
fmt.Println("people name =>", peopleNames[1]) // John

// 对slice里的值做回圈操作
for index, name := range peopleNames {
    fmt.Println("index", index)
    fmt.Println("name", name)
}
// 如果你只需要slice的值,不需要index的话,就可以用_来作替代
for _, name := range peopleNames {
    fmt.Println("name", name)
}

map

在golang中,slice是用数字来代表其中每个object的位置,而map就可以透过其他属性的内容来找到相对应的object的位置,这个会常常与未来会提到的interface一起使用,来承接json物件的东西

person := make(map[string]string)
person["name"] = "Kevin"
person["address"] = "Taipei"
x := "address"
fmt.Println(person)
fmt.Println(person["name"]) // Kevin
fmt.Println(person[x]) // Taipei

相关文章:

  • Day 18: Security Hub简介
  • Day12 - 如何查询委托单状态
  • 没收到资讯的第二天...
  • [区块链&DAPP介绍 Day10] Solidity 教学 - units and globally available variables-1
  • [Day 30] 资料产品开发实务 - 完结撒花!
  • 【教练我想写 C#】建啦哪次不建 Web API # Get
  • Day 30 五个自动化测试的好处
  • Class and Style Bindings
  • 【2021法遵科技与电脑稽核专题竞赛】初赛即将开跑,欢迎师生踊跃报名!
  • 快乐很简单,但要简单却很难。
  • Day09 - 套用 Html Helper - 复杂型别 object + object collection
  • Day10 获取摄影机及麦克风的访问权限
  • Day 10: 人工智慧在音乐领域的应用 (机器学习/深度学习与类神经网路一)
  • [DAY 28] 回传 Gazebo 当中机器人之座标
  • 30-20 之 Domain Layer - UnitOfWork
  • RPA是什么?Litrpa是什么?可以做什么好用吗?
  • Google SEO入门:如何做好谷歌网站排名SEO
  • 使用MailPoet扩展您的电子商务邮件列表
  • 让 Rank Math SEO 输出关键词 keywords meta 字段信息
  • 阿里云国际版怎么注册绑卡购买香港美国新加坡云主机【2020年最新教程】
  • 挖矿是什么?怎么挖矿怎么挖比特币?虚拟币比特币挖矿原理
  • Git是什么?
  • 国外抗攻击服务器推荐:DDOS高防服务器推荐
  • 以太坊是什么?以太坊原理和以太坊入门教程
  • DNS是什么?DNS有什么用?为什么要用DNS解析域名
  • Facebook和instagram推广营销教程
  • WordPress 通过代码实现 Ajax 自动完成搜索
  • VPS评测:阿里、腾讯、百度、京东VPS最低配理性对比
  • 教程/Directory Lister逗比魔改版 Github开源(个人云)
  • 区块链是什么东西?区块链原理是什么