那就接续着昨天的内容,今天提到的也是大家常用的function及slice
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是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)
}
在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 3 - 开始写第一个测试
昨天写了BFS模板&一题模板题,今天放几题比较复杂的~~ 例题实战 909. 蛇梯棋 这题最...
微服务系统之间的呼叫链结可能错纵复杂,除了系统日志(Logging)和监控指标(Metrics),链...
第十六周噜 专题进行了两周 目前进度就是 刻了一些画面做了一些功能 做好注册与登入功能 在刻画面的时...
起源 於 2015 年 3 月 Facebook 开放了 React Native 的原始码,让使...
前言 昨天只写了注册与登入的功能,好像完全没有提到这到底是个什麽样的app... 那天,没有朋友的我...