1. 陣列作為函式引數
package main
import "fmt"
func swap(a int, b int) {
a, b = b, a
}
func main0101() {
a := 10
b := 20
//值傳遞 形參不能改變實參的值 形參和實參是不同的地址單元
swap(a, b)
fmt.Println(a)
fmt.Println(b)
}
//陣列作為函式引數 返回值
func BubbleSort(arr [10]int) [10]int {
//fmt.Println(arr)
//fmt.Println(len(arr))
//arr[0]=123
//arr[1]=234
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
//fmt.Println(arr)
}
func main() {
arr := [10]int{9, 1, 5, 6, 8, 4, 7, 10, 3, 2}
//陣列作為函式引數是值傳遞
//形參和實參是不同的儲存單元
// 記憶體中有兩份獨立的陣列儲存不同的資料
// 在函式呼叫結束形參單元銷燬 不會影響主調函式中實參的值
//如果想通過函式計算結果並傳遞給實參 需要使用陣列作為函式的返回值
arr = BubbleSort(arr)
fmt.Println(arr)
}
2. 切片作為函式引數
package main
import "fmt"
//切片名作為函式引數 返回值
func test(s []int) []int{
//fmt.Println(s)
//fmt.Println(len(s))
//s[0]=123
//s[5]=666
//fmt.Printf("%p\n", s)
//for i := 0; i < len(s)-1; i++ {
// for j := 0; j < len(s)-1-i; j++ {
// if s[j] > s[j+1] {
// s[j], s[j+1] = s[j+1], s[j]
// }
// }
//}
//如果是函式中使用append進行資料新增時 形參的地址改變就不會在指向實參的地址
s = append(s, 11, 12, 13, 14, 15)
fmt.Printf("%p\n",s)
fmt.Println(s)
return s
}
func main() {
//切片名本身就是一個地址
slice := []int{9, 1, 5, 6, 8, 4, 7, 10, 3, 2}
fmt.Printf("%p\n", slice)
//地址傳遞 形參可以改變實參
slice=test(slice)
fmt.Println(slice)
}
3. 字串處理函式
package main
import (
"strings"
"fmt"
)
func main0301() {
//查詢一個字串在另外一個字串中是否出現
str1:="hello world"
str2:="llo"
//Contains(被查詢字串,查詢字串)
//一般用作於模糊查詢
b:=strings.Contains(str1,str2)
if b{
fmt.Println("找到了")
}else{
fmt.Println("未找到")
}
}
func main0302(){
//字串切片
slice:=[]string{"1234","4637","2907","2308"}
//字串連線
str:=strings.Join(slice,",")
fmt.Println(str)
}
func main0303(){
str1:="hello worllod"
str2:="llo"
//查詢一個字串在另外一個字串中第一次出現的位置 返回值為int型別是下標
i:=strings.Index(str1,str2)
fmt.Println(i)
}
func main0304(){
str:="性感法師線上講課"
//將一個字串重複n次
str1:=strings.Repeat(str,3)
fmt.Println(str1)
}
func main0305(){
str:="性感法師線上性感講課"
//字串替換 用作於遮蔽敏感詞彙
//如果替換次數小於0 表示全部替換
str1:=strings.Replace(str,"性感","**",-1)
fmt.Println(str1)
}
func main0306(){
//str1:="1300-199-1433"//13001991433
str1:="123456@qq.com"
//將字串按照標誌位進行切割變成切片
slice:=strings.Split(str1,"@")
//str2:=strings.Join(slice,"")
fmt.Println(slice[0])
//fmt.Println(str2)
}
func main0307(){
str:="=====a=u=ok========"
//去掉字串頭尾內容
str1:=strings.Trim(str,"=")
fmt.Printf("%s",str1)
}
func main0308(){
str:=" are you ok "
//去掉字串中的空格轉成切片 一般用於做統計單詞個數
slice:=strings.Fields(str)
//fmt.Println(slice)
//for _,v:=range slice{
// fmt.Printf("=%s=\n",v)
//}
fmt.Println(len(slice))
}
func main(){
//查詢
//bool型別=strings.Contains(被查詢字串,查詢字串)
//int型別=strings.Index(被查詢字串,查詢字串)
//分割組合
//string型別=strings.Join(字串切片,標誌)
//[]string型別=strings.Split(切割字串,標誌)
//重複和替換
//string型別=strings.Repeat(字串,次數)
//string型別=strings.Replace(字串,被替換字串,替換字串,次數)
//去掉內容
//string型別=strings.Trim(字串,去掉字串)
//[]string型別=strings.Fields(字串)
}
4. 字串型別轉換
package main
import (
"fmt"
"strconv"
)
func main0401() {
str:="hello world"
//將字串轉成字元切片 強制型別轉換
slice:=[]byte(str)
//fmt.Println(slice)
slice[4]='a'
for i:=0;i<len(slice);i++{
fmt.Printf("%c",slice[i])
}
}
func main0402(){
//字元切片
slice:=[]byte{'h','e','l','l','o',97}
//fmt.Println(slice)
fmt.Println(string(slice))
}
func main0403(){
//將其他型別轉成字串 Format
//b:=false
//str:=strconv.FormatBool(b)
//fmt.Println(str)
//str:=strconv.FormatInt(123,10)//在計算機中進位制可以表示2-36進位制 2 8 10 16
//fmt.Println(str)
//str:=strconv.FormatFloat(3.14159,'f',4,64)
//fmt.Println(str)
str:=strconv.Itoa(123)
fmt.Println(str)
}
func main0404(){
//將字串轉成其他型別
//b,err:=strconv.ParseBool("true")
//if err != nil{
// fmt.Println("型別轉化出錯")
//}else{
// fmt.Println(b)
//}
//value,_:=strconv.ParseInt("abc",16,64)
//fmt.Println(value)
//value,_:=strconv.ParseFloat("3.14159",64)
//fmt.Println(value)
//value,_:=strconv.Atoi("123")
//
//fmt.Println(value)
}
func main(){
slice:=make([]byte,0,1024)
//將其他型別轉成字串新增到字元切片裡面
slice=strconv.AppendBool(slice,false)
slice=strconv.AppendInt(slice,123,2)
slice=strconv.AppendFloat(slice,3.14159,'f',4,64)
slice=strconv.AppendQuote(slice,"hello")
fmt.Println(string(slice))
}